在Qt5中已经集成了Json相关的类,直接使用即可,很方便。但是Qt4没有,需要使用第三方的库来处理Json,JsonCpp就是一款基于c++的开源跨平台的三方库。
Json格式说明
JSON 是存储和交换文本信息的语法。类似 XML。但是JSON 比 XML 更小、更快,更易解析。要注意的是,Json的列表是无序的。
- 数据由逗号分隔
- 大括号保存对象
- 中括号保存数组
- 可嵌套
下面是几个例子
{ "firstName":"Bill" , "lastName":"Gates" , "gender":"man" },
[
{ "name":"百度" , "url":"www.baidu.com" },
{ "name":"谷歌" , "url":"www.google.com" },
{ "name":"微博" , "url":"www.weibo.com" }
]
{
"name": "张三",
"gender": "男",
"age": 18,
"school": {
"name": "清华大学",
"major": "计算机科学与技术",
"degree": "学士学位"
"url": "http://www.xxxxxx.com"
},
"address": [
{
"province": "江苏",
"city": "苏州",
"district": "吴中区"
},
{
"province": "四川",
"city": "成都",
"district": "高新区"
},
{
"province": "安徽",
"city": "合肥",
"district": "蜀山区"
}
]
}
Json解析
#include <iostream>
#include "json/json.h"
using namespace std;
int main() {
std::string input_json = "[\n"
" { \"name\":\"Baidu\" , \"url\":\"www.baidu.com\" }, \n"
" { \"name\":\"Google\" , \"url\":\"www.google.com\" }, \n"
" { \"name\":\"Weibo\" , \"url\":\"www.weibo.com\" }\n"
"]";
Json::Reader reader;
Json::Value root;
if (!reader.parse(input_json, root))
{
cout << "reader parse error: " << strerror(errno) << endl;
return -1;
}
auto size = root.size();
cout << "total " << size << " elements" << endl;
// 由于这是一个json数组,所以加一个for循环
for (int i = 0; i < size; ++i)
{
auto name = root[i]["name"].asString();
auto url = root[i]["url"].asString();
cout << "name: " << name << ", url: " << url << endl;
}
return 0;
}
输出如下:
Json写入
1. 写入未嵌套数据
#include <iostream>
#include "json/json.h"
using namespace std;
int main() {
Json::FastWriter writer;
Json::Value writeValue;
writeValue["name"] = "zhangsan";
writeValue["age"] = 18;
writeValue["gender"] = "man";
auto json_input = writer.write(writeValue);
cout << json_input << endl;
return 0;
}
输出如下:
2. 写入嵌套数据
#include <iostream>
#include "json/json.h"
using namespace std;
int main() {
Json::FastWriter writer;
Json::Value root;
// data for zhangsan
Json::Value zhangsan;
zhangsan["name"] = "zhangsan";
zhangsan["age"] = 18;
zhangsan["gender"] = "man";
root.append(zhangsan);
// data for lisi
Json::Value lisi;
lisi["name"] = "lisi";
lisi["age"] = 19;
lisi["gender"] = "woman";
root.append(lisi);
// data for wangwu
Json::Value wangwu_address;
wangwu_address["country"] = "China";
wangwu_address["city"] = "HeFei";
wangwu_address["district"] = "ShuShan";
Json::Value wangwu;
wangwu["name"] = "wangwu";
wangwu["age"] = 20;
wangwu["gender"] = "man";
wangwu["address"] = wangwu_address;
root.append(wangwu);
auto json_input = writer.write(root);
cout << json_input << endl;
return 0;
}
输出如下: