赞
踩
解析的工具有:
RapidJSON
JSON for Modern C++
Boost.PropertyTree
C++ REST SDK
QtJson
nlohmann/json
Jansson
cJSON
#include "rapidjson/document.h" #include "rapidjson/writer.h" #include "rapidjson/stringbuffer.h" #include "iostream" using namespace rapidjson; int main() { // // JSON字符串 // const char* json = R"({"name":"John","age":30,"isStudent":true})"; // // 解析JSON字符串 // Document document; // document.Parse(json); // // 获取字段 // const char* name = document["name"].GetString(); // int age = document["age"].GetInt(); // bool isStudent = document["isStudent"].GetBool(); // // // 输出结果 // printf("name: %s\nage: %d\nisStudent: %s\n", name, age, isStudent ? "true" : "false"); // // return 0; rapidjson::Document document; // 创建一个JSON文档对象 document.SetObject(); // 将该文档对象设置为一个JSON对象 rapidjson::Document::AllocatorType& allocator = document.GetAllocator(); // 获取分配器 rapidjson::Value hobbies(rapidjson::kObjectType); // 创建一个空对象 // 向对象中添加键值对 hobbies.AddMember("name", "reading", allocator); hobbies.AddMember("level", "advanced", allocator); // 将对象添加到JSON对象中 document.AddMember("hobbies", hobbies, allocator); StringBuffer buffer; // 创建一个字符串缓冲区 Writer<StringBuffer> writer(buffer); // 创建一个JSON写入器 document.Accept(writer); // 将JSON对象序列化为字符串并写入缓冲区 // 输出结果 std::cout<< buffer.GetString() << std::endl; }
#include "rapidjson/document.h" #include "rapidjson/writer.h" #include "rapidjson/stringbuffer.h" #include <iostream> using namespace rapidjson; int main() { Document document; // 创建一个JSON文档对象 document.SetObject(); // 将该文档对象设置为一个JSON对象 Document::AllocatorType& allocator = document.GetAllocator(); // 获取分配器 Value hobbies(kArrayType); // 创建一个空数组 // 向数组中添加多个对象 Value reading(kObjectType); reading.AddMember("name", "reading", allocator); reading.AddMember("level", "advanced", allocator); hobbies.PushBack(reading, allocator); Value swimming(kObjectType); swimming.AddMember("name", "swimming", allocator); swimming.AddMember("level", "beginner", allocator); hobbies.PushBack(swimming, allocator); // 将数组添加到JSON对象中 document.AddMember("hobbies", hobbies, allocator); StringBuffer buffer; // 创建一个字符串缓冲区 Writer<StringBuffer> writer(buffer); // 创建一个JSON写入器 document.Accept(writer); // 将JSON对象序列化为字符串并写入缓冲区 // 输出结果 std::cout << buffer.GetString() << std::endl; return 0; }
个人记录
#include "rapidjson/document.h" #include "rapidjson/writer.h" #include "rapidjson/stringbuffer.h" #include <iostream> using namespace rapidjson; int main() { Document document; // 创建一个JSON文档对象 document.SetObject(); // 将该文档对象设置为一个JSON对象 Document::AllocatorType &allocator = document.GetAllocator(); // 获取分配器 Value hobbies(kArrayType); // 创建一个空数组 // 向数组中添加多个对象 Value reading(kObjectType); reading.AddMember("name", "reading", allocator); reading.AddMember("level", "advanced", allocator); hobbies.PushBack(reading, allocator); // 将数组添加到JSON对象中 document.AddMember("hobbies", hobbies, allocator); StringBuffer buffer; // 创建一个字符串缓冲区 Writer<StringBuffer> writer(buffer); // 创建一个JSON写入器 document.Accept(writer); // 将JSON对象序列化为字符串并写入缓冲区 //读出来 Document document1; document1.Parse(buffer.GetString()); //这一行代码是获取了名为"hobbies"的成员的值,它在之前的代码中被添加到了document对象中 //hobbies1是一个引用,指向document对象中名为"hobbies"的成员的值,它是一个包含多个对象的数组。 //这里使用const修饰表示hobbies1是一个只读的引用,即不能通过hobbies1修改document对象中的值。 const Value &hobbies1 = document["hobbies"]; //获取json数组的个数 for (SizeType i = 0; i < hobbies1.Size(); i++) { const Value &hobby = hobbies1[i]; const char *name = hobby["name"].GetString(); const char *level = hobby["level"].GetString(); std::cout << "Hobby " << i << ": name = " << name << ", level = " << level << std::endl; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。