怎么在C++中使用jsoncpp对json进行解析
怎么在C++中使用jsoncpp对json进行解析?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
jsoncpp中主要的类:
Json::Value:可以表示所有支持的类型,如:int , double ,string , object, array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载<,<=,>,>=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。
Json::Reader:将文件流或字符串创解析到Json::Value中,主要使用parse函数。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。
Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)。
Json::Reader可以通过对Json源目标进行解析,得到一个解析好了的Json::Value,通常字符串或者文件输入流可以作为源目标。
json示例:
[ { "name": "json", "lines": [ { "line": "1" }, { "line": "2" }, { "cpp": "jsoncpp" }, { "java": "jsoninjava" }, { "php": "support" } ] }, { "name": "c++", "lines": [ { "line": "3" }, { "line": "4" }, { "cpp": "jsoncpp" }, { "java": "jsoninjava" }, { "php": "nosupport" } ] } ]
C++代码:
#include <iostream> #include <fstream> #include <string> #include "../src/json/json.h" using namespace std; using namespace Json; void main() { fstream ofile("json.json"); string strjson; if (!ofile.is_open()) { return; } string strline; while (getline(ofile, strline)) { strjson += strline; } ofile.close(); Json::Reader reader; // 读取器 Json::Value root; // Value的值值可以是任一对象 if (reader.parse(strjson, root)) { int size = root.size(); // 根结点个数 for (int j = 0; j < size; j++) { cout << root[j]["name"].asString() << endl; const Json::Value arrayObj = root[j]["lines"]; for (int i = 0; i < arrayObj.size(); i++) { if (arrayObj[i].isMember("line")) { cout << arrayObj[i]["line"].asString() << endl; } if (arrayObj[i].isMember("cpp")) { cout << arrayObj[i]["cpp"].asString() << endl; } if (arrayObj[i].isMember("java")) { cout << arrayObj[i]["java"].asString() << endl; } int m = 0; } } } }
看完上述内容,你们掌握怎么在C++中使用jsoncpp对json进行解析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!