初探JsonCpp - 编译与基本使用

本文介绍了JSON第三方库JsonCpp的安装编译过程,包括在CentOS上通过scons构建动态和静态库。接着讲解了JsonCpp的基本使用,涉及Value、Reader和Writer类的介绍,以及三个使用示例,包括从字符串、文件读取JSON以及程序生成JSON数据。

JSON(JavaScript Object Notation,JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,有效地提升了网络传输效率。

本文主要介绍 JSON 第三方解析库 JsonCpp 的安装编译过程以及基本使用。

编译

https://sourceforge.net/projects/jsoncpp/ 我们可以获取到 JsonCpp 库。

CentOS上 的编译过程如下:

1)解压缩。
这里写图片描述

2)在编译生成动态和静态库之前,我们需要安装 linux 下的自动构建工具 scons,步骤如下图。
这里写图片描述

解压缩,然后进入目录 scons-2.2.0。
这里写图片描述

这里写图片描述

3)利用自动构建工具 scons 生成所需的 libjson,操作如图。
这里写图片描述

执行完毕,会在目录 jsoncpp-src-0.5.0/libs/linux-gcc-4.4.7 下生成库文件:
这里写图片描述

然后,将动态链接库 libjson_linux-gcc-4.4.7_libmt.so 添加到搜索路径中。

至此,编译就完成了,接下来我们来看看 JsonCpp 的基本使用。

基本使用

(1)JsonCpp简介
JsonCpp 主要包含三种类型的class:ValueReaderWriter
①Json::Value 是 JsonCpp 中最基本、最重要的类,用于表示各种类型的对象,JsonCpp 支持的对象类型可见 Json::ValueType 枚举值。

②Json::Reader 是用于读取的,说的确切点,是用于将字符串转换为 Json::Value 对象的。

③Json::Writer 类是一个纯虚类,并不能直接使用。我们一般使用 Json::Writer 的子类:Json::FastWriter、Json::StyledWriter 和 Json::StyledStreamWriter。

(2)使用示例
1)示例1:从字符串中读取JSON
代码如下:

#include "json/json.h"
#include <iostream>

using namespace std;

int main()
{
    const char* strValue = "{\"name\":\"json\",\"gender\":\"male\",\"height\":175,\"weight\":65}";

    Json::Reader reader;
    Json::Value value;

    if(reader.parse(strValue, value))
    {
        string name = value["name"].asString();
        string gender = value["gender"].asString();
        int height = value["height"].asInt();
        int weight = value["weight"].asInt();

        cout << "name: " << name << endl;
        cout << "gender:" << gender << " height:" << height << "cm weight:" << weight << "kg" << endl;
    }
    return 0;
}

运行结果:
这里写图片描述

2)示例2:从文件中读取JSON
待解析的文件内容如下:

{
    "name": "json",
    "array": [
        "123",
        "456",
        "789"
     ]
}

代码如下:

#include "json/json.h"
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream is;
    is.open("JsonText", ios::binary);

    Json::Reader reader;
    Json::Value value;

    if(reader.parse(is, value))
    {
        if(!value["name"].isNull())
        {
            cout << value["name"].asString() << endl;
            Json::Value arrayObj = value["array"];
            for(int i = 0; i < arrayObj.size(); i++)
            {
                cout << arrayObj[i].asString() << endl;
            }
        }
    }
    return 0;
}

运行结果:
这里写图片描述

3)示例3:程序生成JSON数据
代码如下:

#include "json/json.h"
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    Json::Value value;
    Json::Value arrayObj;

    for(int i = 0; i < 2; i++)
    {
        arrayObj.append(i);
    }

    value["key1"] = "value1";
    value["key2"] = "value2";
    value["array"] = arrayObj;

    // 直接输出
    cout << "FastWriter:" << endl;
    Json::FastWriter fw;
    cout << fw.write(value) << endl;

    // 缩进输出
    cout << "StyledWriter:" << endl;
    Json::StyledWriter sw;
    cout << sw.write(value) << endl;

    // 输出到文件
    ofstream os;
    os.open("JsonTest");
    os << sw.write(value);
    os.close();

    return 0;
}

运行结果:
这里写图片描述

这里写图片描述


参考资料:
1.【C++】JSON文件的读取和生成. https://my.oschina.net/Tsybius2014/blog/289527
2.C++ Jsoncpp源代码编译与解析Json. http://www.cnblogs.com/xudong-bupt/p/3696329.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值