天天看点

7、JsonCpp简单使用(3)

1、相关概念总结

(1)解析json的方法

Json::Value json;     //表示一个json格式的对象

Json::Reader reader;  //json解析

reader.parse(json_buf/*json格式的字符串*/,json,false);  //解析出json放到json中

    jsoncpp库中的Reader类用来将字串或者流载入解析器。后期可以用Reader里面的解析方法把Json字串解码为C++认识的数据。可以用 Json::Reader来声明一个Reader实例。Reader中最常用的就是一个parse方法,该方法用来将载入的json字串解析为C++格式的数据。

(2) 数组访问

Json::Value //格式如下

[["key1":value1],["key2":value2]]

Json::Value::const_iterator iter;  //迭代器

for(iter = input.begin(); iter != input.end(); iter++)

Json::Value::Members member=(*iter).getMemberNames();

*(member.begin());          // 输出 key1,key2

(*iter)[*(member.begin())];     //输出 value1,value2

    Value类是库中的核心类,用于存储各样格式的数据,可以包括int,double,short,char *,string,bool,object,array等几乎所有格式的数据。该库的编码和解码的核心功能都是用Value类实现的。就用以上的 Reader的parse方法来说,需要传入一个Value类别的引用值,就是用来存储Json数据的根值,并且可以用这个根值来存取其他的所有值。

(3) 对象访问

直接用 value["key"]即可

(4) 输出json格式串

    调用 Json::FastWriter的writer

    writer是该库的一个虚类,没有真正的实现encode的功能。需要重载里头的方法来实现真正的encode功能。FastWriter是该库中真正实现encode功能的类,用来实现将Value编码称为Json串。Json::StyledWriter 是格式化后的json。

    不支持utf-8格式的输出,需要自己调用writer之后,用iconv转化成utf-8字符串

2、示例代码

1)示例代码1

7、JsonCpp简单使用(3)
7、JsonCpp简单使用(3)

View Code

7、JsonCpp简单使用(3)
7、JsonCpp简单使用(3)

结果显示

可以看到,直接用wirter输出的json为非格式化的数据,而通过root.toStyledString()后,代码就是格式化的。

2)示例3,来源于官网

7、JsonCpp简单使用(3)
7、JsonCpp简单使用(3)
7、JsonCpp简单使用(3)
7、JsonCpp简单使用(3)

参考

【1】 讲解说明

<a href="http://hi.baidu.com/%B4%AB%CB%B5%D6%D0%B5%C4%C8%CC%D5%DF%C3%A8/blog/item/a6eb970c98a644d67acbe15a.html">http://hi.baidu.com/%B4%AB%CB%B5%D6%D0%B5%C4%C8%CC%D5%DF%C3%A8/blog/item/a6eb970c98a644d67acbe15a.html</a>

【2】 示例,该作者博文不错,涵盖了各个方面

<a href="http://hi.baidu.com/s_jqzhang/blog/item/a3c5df1f9408246ff624e4f5.html/cmtid/02e72e4fcb488039aec3ab28">http://hi.baidu.com/s_jqzhang/blog/item/a3c5df1f9408246ff624e4f5.html/cmtid/02e72e4fcb488039aec3ab28</a>

【3】 boost库支持json比较好

<a href="http://freedomhui.com/?p=6">http://freedomhui.com/?p=6</a>

【3】 对json的类型作了简单的小结,为json-c进行了介绍

<a href="http://developer.51cto.com/art/201001/176060.htm">http://developer.51cto.com/art/201001/176060.htm</a>

【4】 官网

<a href="http://jsoncpp.sourceforge.net/index.html">http://jsoncpp.sourceforge.net/index.html</a>

相关的类介绍及使用

<a href="http://jsoncpp.sourceforge.net/annotated.html">http://jsoncpp.sourceforge.net/annotated.html</a>

【5】 其他例子