RapidJSON解析数组
Posted GreedySnaker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RapidJSON解析数组相关的知识,希望对你有一定的参考价值。
一 简介
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 `····
以上是关于RapidJSON解析数组的主要内容,如果未能解决你的问题,请参考以下文章