Json解析 --JsonCpp

8 篇文章 0 订阅

1、下载scons

http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.tar.gz/download

2、解压scons-2.1.0.tar.gz

tar -zvxf scons-2.1.0.tar.gz

3、进入到解压目录scons-2.1.0下面,执行命令:

sudo python setup.py install

4、下载JsonCpp 最新版本

http://sourceforge.net/projects/jsoncpp/files/

5、解压jsconcpp

tar -zvxf jsoncpp-src-0.5.0.tar.gz

6、进入到jsoncpp解压目录(jsoncpp-src-0.5.0)下,执行命令:

scons platform=linux-gcc 

7、将/jsoncpp-src-0.5.0/include/目录下的json文件夹拷贝到需要使用的项目下(其中包含的都是一些所需的头文件)

8、将jsoncpp-src-0.5.0/libs/linux-gcc-4.8.5/目录下的libjson_linux-gcc-4.9.1_libmt.a 重命名为libjson.a,并拷贝到/usr/local/lib/下

包含json头文件后若出现如下一系列报错:

/usr/include/sys/cdefs.h:42:20: error: missing binary operator before token "("
 # if __GNUC_PREREQ (4, 6) && !defined _LIBC
                    ^
/usr/include/sys/cdefs.h:55:44: error: missing binary operator before token "("
 # if !defined __cplusplus && __GNUC_PREREQ (3, 3)
                                            ^
/usr/include/sys/cdefs.h:60:44: error: missing binary operator before token "("
 #  if defined __cplusplus && __GNUC_PREREQ (2,8)
                                            ^
/usr/include/sys/cdefs.h:144:19: error: missing binary operator before token "("
 #if __GNUC_PREREQ (4,3)
                   ^
/usr/include/sys/cdefs.h:157:19: error: missing binary operator before token "("
 #if __GNUC_PREREQ (2,97)
                   ^
/usr/include/sys/cdefs.h:219:19: error: missing binary operator before token "("
 #if __GNUC_PREREQ (2,96)
                   ^
/usr/include/sys/cdefs.h:228:19: error: missing binary operator before token "("
 #if __GNUC_PREREQ (2,96)

Makefile中-I参数设置为 -I./include ,不要直接设置为-I./include/json,不然容易导致头文件冲突。增加 -ljson 编译参数。

测试json:

{
    "title": "title value",
    "version":"3.2",
    "json.url": "https://www.json.com",
    "keywords": "show json",
    "function": ["JSON DATA",
    "JSON BUILD FORMAT",
    "JSON ARRAY",
    "hightlight"]
}

测试代码:

void test_json()
{
    //create json data and save it
    string test="{\"id\":1,\"name\":\"lisa\",\"address\":\"hangzhou\"}";
    Json::Reader reader;
    Json::FastWriter writer;
    Json::Value value;
    if(reader.parse(test,value)) {
        if(!value["id"].isNull()) {
            cout<<value["id"].asInt()<<endl;
            cout<<value["name"].asString()<<endl;
            cout<<value["address"].asString()<<endl;
        }
        //save to file
        string str = writer.write(value);
        cout << str << endl;

        ofstream ofs;
        ofs.open("./settings/json/code_create.json");
        ofs << str;
        ofs.close();
    }

    //read json data
    Json::Value json_object;
    ifstream ifs;
    ifs.open("./settings/json/info.json", ios::binary);
    if (!reader.parse(ifs, json_object)){
        cout << "open error" << endl;
        ifs.close();
    }else{
        cout << "title:" << json_object["title"].asString() << endl;
        cout << "version:" <<json_object["version"].asString() << endl;

        int num = json_object["function"].size();
        for (int i = 0; i < num; i++){
            if(json_object["function"][i].isArray())
            {
                Json::Value array_obj = json_object["function"][i];
                cout<<"----------array"<<endl;
                for(int idx = 0; idx < array_obj.size(); ++idx)
                {
                    cout << array_obj[i].asString() << " ";
                }
                cout<<"----------"<<endl;

                continue;
            }

            cout << json_object["function"][i].asString() <<endl;
        }
        ifs.close();
        cout << endl;
    }
}

运行结果:

运行后产生的json文件:

Json元素类型校验:

bool isNull();

bool isChar();

bool isUChar();

bool isShort();

bool isUShort();

bool isLong();

bool isULong();

bool isInt();

bool isUInt();

bool isInt64();

bool isUInt64();

bool isBoolean();

bool isFloat();

bool isDouble();

bool isString();

bool isObject();

bool isArray();

 

json数据类型访问 

const char* asCString() const;

JSONCPP_STRING asString() const;

Int asInt() const;

UInt asUInt() const;

Int64 asInt64() const;

UInt64 asUInt64() const;

LargestInt asLargestInt() const;

LargestUInt asLargestUInt() const;

float asFloat() const;

double asDouble() const;

bool asBool() const;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值