前言:
曾经一段时间XML成为互联网业界内的数据传输格式标准,但有人对XML提出了质疑,认为XML数据格式比较繁杂,冗长等,于是提出了一种新的表示格式—JSON。
对于JSON格式,在此就不作详细的说明了,下面主要讨论下C++解析json文件的工具—Jsoncpp的使用。
下载地址:
https://github.com/open-source-parsers/jsoncpp/tree/1.8.4
配置说明:
从github上download代码后,会包含很多文件,有些教程说需要先进行编译然后生成lib文件调用,其实大可不必如此麻烦,C++在使用时只需要使用json.h和jsoncpp.cpp两个文件即可。
需要说明的一点是,json.h和jsoncpp.cpp两个文件是需要通过python脚本生成,生成方法也很简单,前提是需要配置好Python开发环境,只需要一条命令即可。
生成json.h和jsoncpp.cpp的方法:
(1) 进入源码的根目录,按住【shift】键然后右击,选择在此处打开命令行,进入cmd界面,然后运行命令:
(2) 此时会在当前目录下生成dist文件件,将dist文件夹下面的json.h和jsoncpp.cpp拷出使用即可。
【附:若无Python环境,可以关注本公众号,回复jsoncpp,即可获取以上两个文件,或者点击下面的链接下载】
下载链接:https://download.csdn.net/download/feengg/12162153
Jsoncpp使用说明:
下面通过一个简单的case说明jsoncpp里主要的接口函数,通过这些基本的函数便可以完成的Json文件的解析和处理。
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;
}
}
}
}