跳转至

jsoncpp 基本用法

项目地址:jsoncpp

JsonCpp是一个用C++编写的库,用于操作JSON数据。它支持JSON的序列化(将JSON对象转换为字符串)和反序列化(从字符串解析出JSON对象),并且可以保留注释,适合存储用户配置文件等。

基本用法

引入头文件

#include <json/json.h>

创建JSON对象

Json::Value root;
root["name"] = "ChatGPT";
root["age"] = 3;
root["skills"] = Json::arrayValue;
root["skills"].append("NLP");
root["skills"].append("Machine Learning");

解析JSON字符串

std::string jsonStr = "{\"name\": \"ChatGPT\", \"age\": 3}";
Json::CharReaderBuilder readerBuilder;
Json::Value root;
std::string errs;
std::istringstream s(jsonStr);
if (Json::parseFromStream(readerBuilder, s, &root, &errs)) {
    // 解析成功
    std::cout << root["name"].asString() << std::endl;
}

序列化JSON对象为字符串

Json::StreamWriterBuilder writerBuilder;
std::string output = Json::writeString(writerBuilder, root);
std::cout << output << std::endl;

进阶用法

读取文件中的JSON

std::ifstream file("config.json");
Json::Value root;
file >> root;

写入JSON到文件

std::ofstream file("output.json");
Json::StreamWriterBuilder writerBuilder;
file << Json::writeString(writerBuilder, root);

访问数组元素

Json::Value skills = root["skills"];
for (const auto& skill : skills) {
    std::cout << skill.asString() << std::endl;
}

其他信息

  • 支持多平台和多编译器
  • 提供Amalgamated源代码,方便集成
  • 详细文档和示例请参考官方文档