1.JsonCpp
1.1.JsonCpp简介
JSON is a lightweight data-interchange format. It can represent numbers,strings,ordered sequences of values,and collections of name/value pairs.
JsonCpp is a C++ library that allows manipulating JSON values,including serialization and deserialization to and from strings. It can also preserve existing comment in unserialization/serialization steps,making it a convenient format to store user input files.
1.2.JsonCpp环境搭建
1.2.1.下载地址
https://github.com/open-source-parsers/jsoncpp#generating-amalgamated-source-and-header
1.2.2.Qt中JsonCpp安装
① 解压jsoncpp-master.zip包
② 在根目录下,运行python amalgamate.py
③ 在根目录中生成dist文件夹包含三个文件dist/json/json-forwards.h dist/json/json.h dist/json.cpp
④ 在Qt工程目录下,生成json文件夹,并拷贝json目录下。
⑤ 在Qt工程中添加现有文件即可。
1.3.读写JsonCpp
1.3.1.写
#include <iostream>
#include <fstream>
#include "json/json.h"
using namespace Json;
using namespace std;
#if 0
{
"animals":{
"dog":[
{
"name":"Rufus","age":15
},{
"name":"Marty","age":null
}
]
}
}
#endif
void writeJson()
{
Value rootAnimalsObj;
Value dog;
Value dogArray;
Value dogValueItem1;
dogValueItem1["name"] = "Rufus";
dogValueItem1["age"] = 15;
Value dogValueItem2;
dogValueItem2["name"] = "Marty";
dogValueItem2["age"] = "";
dogArray.append(dogValueItem1);
dogArray.append(dogValueItem2);
dog["dog"] = dogArray;
rootAnimalsObj["animals"] = dog;
string str = rootAnimalsObj.toStyledString();
cout<<str;
ofstream ofs;
ofs.open("test_write.json");
ofs << str;
ofs.close();
return;
}
int main()
{
writeJson();
return 0;
}
1.3.2.读
#include <iostream>
#include <fstream>
#include "json/json.h"
using namespace Json;
using namespace std;
#if 0
{
"animals":{
"dog":[
{
"name":"Rufus","age":null
}
]
}
}
#endif
void readJson()
{
ifstream is("aa.json");
if(!is)
{
cout<<"open error"<<endl;
return;
}
Reader reader;
Value root;
if(reader.parse(is,root))
{
cout<<root<<endl;
Value & dogArr = root["animals"]["dog"];
for(int i=0; i<dogArr.size(); i++)
{
cout<<dogArr[i]["name"].asString()<<endl;
cout<<dogArr[i]["age"].asInt()<<endl;
}
}
is.close();
}
int main()
{
readJson();
return 0;
}