一 简介
RapidJSON是腾讯开源的一个高效的C++ JSON解析器及生成器,它是只有头文件的C++库,所以使用cmake非常好用。RapidJSON是跨平台的,支持Windows, Linux, Mac OS X及iOS, Android。
GitHub地址
二 经验
json串
{"info":
{"description": "This is v1.0 of the VQA dataset.",
"license":
{"questions":[
{"question": "What is the table made of?",
"image_id": 350623,
"question_id": 3506232},
{"question": "Is the food napping on the table?",
"image_id": 350623,
"question_id": 3506230}]}
}
}
解析获得questions中的question
#include "rapidjson/document.h"
#include "rapidjson/prettywriter.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
#include <fstream>
#include <string>
int main()
{
rapidjson::Document document; // 定义一个Document对象
std::string str = "";
document.Parse(str.c_str()); // 解析,Parse()无返回值,也不会抛异常
if (document.HasParseError()) // 通过HasParseError()来判断解析是否成功
{
// 可通过GetParseError()取得出错代码,
// 注意GetParseError()返回的是一个rapidjson::ParseErrorCode类型的枚举值
// 使用函数rapidjson::GetParseError_En()得到错误码的字符串说明,这里的En为English简写
// 函数GetErrorOffset()返回出错发生的位置
printf("parse error: (%d:%d)%s\n", document.GetParseError(), document.GetErrorOffset(), rapidjson::GetParseError_En(document.GetParseError()));
return -1;
}
else
{
if(document.HasMember("info"))
{
const rapidjson::Value& obj = document["info"];
if(obj.HasMember("license"))
{
const rapidjson::Value& license= obj["license"];
if(license.HasMember("questions")&&
license["questions"].IsArray())
{
auto questions = license["questions"].GetArray();
for(int i=0; i <questions.Size();i++)
{
if(questions[i].HasMember("question")&&
questions[i]["question"].IsString())
{
std::string strQuestion = questions[i]["question"].GetString();
}
}
}
}
}
}
return 0;
}
三 总结
不清楚的类型全是auto `····