JsonCpp使用

在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 

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

输出如下:

JsonCpp使用_第1张图片

Json写入

1. 写入未嵌套数据

#include 

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

输出如下:

JsonCpp使用_第2张图片

2. 写入嵌套数据

#include 

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

 输出如下:

JsonCpp使用_第3张图片

你可能感兴趣的:(C++)