[jsoncpp]JSON序列化与反序列化

打印 上一主题 下一主题

主题 821|帖子 821|积分 2463

JSONCpp是一个C++库,用于剖析和生成JSON数据。在本文中,我们将先容JSONCpp的基本用法,包括怎样剖析JSON数据、怎样访问JSON对象和数组,以及怎样生成JSON数据。
1. 下载和编译JSONCpp

首先,确保您已经安装了JSONCpp库:
  1. git clone --depth 1 https://ghproxy.cn/https://github.com/open-source-parsers/jsoncpp.git
  2. cd jsoncpp/
  3. mkdir build
  4. cd build/
  5. cmake ..
  6. make
复制代码
2. 剖析JSON数据

要剖析JSON数据,您必要创建一个Json::Value对象来存储剖析后的JSON数据。然后,使用Json::CharReaderBuilder和Json::parseFromStream函数从字符串中剖析JSON数据。以下是一个示例:
  1. #include <iostream>
  2. #include <sstream>
  3. #include <json/json.h>
  4. int main() {
  5.     Json::Value root;
  6.     Json::CharReaderBuilder builder;
  7.     std::string errors;
  8.     // 使用非const字符串
  9.     std::string json_data = "{"name":"John", "age":30, "city":"New York"}";
  10.     std::istringstream json_stream(json_data);
  11.     bool parsingSuccessful = Json::parseFromStream(builder, json_stream, &root, &errors);
  12.     if (parsingSuccessful) {
  13.         std::cout << "Name: " << root["name"].asString() << std::endl;
  14.         std::cout << "Age: " << root["age"].asInt() << std::endl;
  15.         std::cout << "City: " << root["city"].asString() << std::endl;
  16.     } else {
  17.         std::cout << "Failed to parse JSON: " << errors << std::endl;
  18.     }
  19.     return 0;
  20. }
复制代码
3. 访问JSON对象和数组

剖析乐成后,您可以通过Json::Value对象访问JSON数据。以下是一个示例,演示怎样访问JSON对象和数组:
  1. #include <iostream>
  2. #include <sstream>
  3. #include <json/json.h>
  4. int main() {
  5.     Json::Value root;
  6.     Json::CharReaderBuilder builder;
  7.     std::string errors;
  8.     const std::string json_data = "{"name":"John", "age":30, "city":"New York", "hobbies":["reading", "traveling"]}";
  9.     std::istringstream json_stream(json_data);
  10.     bool parsingSuccessful = Json::parseFromStream(builder, json_stream, &root, &errors);
  11.     if (parsingSuccessful) {
  12.         const Json::Value& hobbies = root["hobbies"];
  13.         for (unsigned int i = 0u; i < hobbies.size(); ++i) {
  14.              std::cout << "Hobby: " << hobbies[i].asString() << std::endl;
  15.          }
  16.     } else {
  17.         std::cout << "Failed to parse JSON: " << errors << std::endl;
  18.     }
  19.     return 0;
  20. }
复制代码
4. 生成JSON数据

要生成JSON数据,您必要创建一个Json::Value对象,然后使用其成员函数添加数据。以下是一个示例,演示怎样生成JSON数据:
  1. #include <iostream>
  2. #include <sstream>
  3. #include <jsoncpp/json/json.h>
  4. int main() {
  5.     Json::Value root;
  6.     root["name"] = "John";
  7.     root["age"] = 30;
  8.     root["city"] = "New York";
  9.     Json::Value hobbies;
  10.     hobbies.append("reading");
  11.     hobbies.append("traveling");
  12.     root["hobbies"] = hobbies;
  13.     std::cout << "Generated JSON: " << root.toStyledString() << std::endl;
  14.     return 0;
  15. }
复制代码
编译程序
  1. g++ --std=c++11 -o gen gen.cpp  -I../include -L./lib -ljsoncpp
复制代码
执行程序得到:
  1. Generated JSON: {
  2.         "age" : 30,
  3.         "city" : "New York",
  4.         "hobbies" :
  5.         [
  6.                 "reading",
  7.                 "traveling"
  8.         ],
  9.         "name" : "John"
  10. }
复制代码
在这个示例中,我们创建了一个Json::Value对象,然后使用其成员函数添加JSON数据。末了,我们使用toStyledString()函数将生成的JSON数据转换为字符串并输出。
总结

JSONCpp是一个功能强盛的C++库,用于剖析和生成JSON数据。通过本文,我们先容了JSONCpp的基本用法,包括怎样剖析JSON数据、怎样访问JSON对象和数组,以及怎样生成JSON数据。您可以根据必要查阅JSONCpp的官方文档以获取更多信息。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表