rapidjson 解析json字符串
rapidjson::Document d;
d.Parse(json);
//是否解析成功
std::cout << "-->" << d.HasParseError() << std::endl;
//是否含有某member
std::cout << "-->" << d.HasMember("project") << std::endl;
//操作符处理简单json
rapidjson::Value& project_value = d["project"];
//操作符处理复杂json
rapidjson::Value& status = d["body"]["status"];
std::cout << "-->" << project_value.GetString() << ", " << status.GetString() << std::endl;
//利用iterator处理简单json
auto iterator = d.FindMember("project");
if (iterator == d.MemberEnd()) {
throw std::runtime_error("iterator to the end");
}
std::cout << iterator->name.GetString() << " " << iterator->value.GetString() << std::endl;
//利用iterator处理复杂json
auto iter = d.FindMember("body");
auto sub_iter = iter->value.FindMember("status");
std::cout << sub_iter->name.GetString() << "," << sub_iter->value.GetString() << std::endl;
//处理array
rapidjson::Value& array = (*ptr)["array"];
for(int i=0;i<array.Size();++i){
std::cout<<array[i].GetInt()<<std::endl;
}
rapidjson生成json字符串
/*
{
"name":"vaadhoo",
"uid":"20180814",
"location":{
"province":"js",
"city":"nj",
"code":210000
},
"years":[
"2013",
"2014",
"2015",
"2016"
],
"books":[
{
"book_name":"Popular Science",
"year":"Mar 1932",
"author":"Unknown"
},
{
"book_name":"The Life Story of a Technology",
"year":"2005",
"author":"Nicole Howard "
}
]
}
*/
rapidjson::Document json_dom;
rapidjson::Document::AllocatorType& allocator = json_dom.GetAllocator();
json_dom.SetObject();
json_dom.AddMember("name", "vaadhoo", allocator);
json_dom.AddMember("uid", "20180814", allocator);
rapidjson::Value location(rapidjson::kObjectType);
location.AddMember("province", "js", allocator);
location.AddMember("city", "nj", allocator);
location.AddMember("code", 210000, allocator);
json_dom.AddMember("location", location, allocator);
rapidjson::Value years(rapidjson::kArrayType);
years.PushBack("2013", allocator);
years.PushBack("2014", allocator);
years.PushBack("2015", allocator);
years.PushBack("2016", allocator);
json_dom.AddMember("years", years, allocator);
rapidjson::Value books(rapidjson::kArrayType);
rapidjson::Value book1(rapidjson::kObjectType);
book1.AddMember("book_name", "Popular Science", allocator);
book1.AddMember("year", "Mar 1932", allocator);
book1.AddMember("author", "Unknown", allocator);
books.PushBack(book1, allocator);
rapidjson::Value book2(rapidjson::kObjectType);
book2.AddMember("book_name", "The Life Story of a Technology", allocator);
book2.AddMember("year", "2005", allocator);
book2.AddMember("author", "Nicole Howard ", allocator);
books.PushBack(book2, allocator);
json_dom.AddMember("books", books, allocator);
rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
json_dom.Accept(writer);
std::string result = buffer.GetString();
std::cout << result << std::endl;