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;
- }