C++使用jsoncpp解析json的方法示例
前言:
曾经一段时间XML成为互联网业界内的数据传输格式标准,但有人对XML提出了质疑,认为XML数据格式比较繁杂,冗长等,于是提出了一种新的表示格式—JSON。
对于JSON格式,在此就不作详细的说明了,下面主要讨论下C++解析json文件的工具—Jsoncpp的使用。
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录。
Jsoncpp是个跨平台的开源库,下载地址:http://sourceforge.net/projects/jsoncpp/。
解压:tar-zvxfjsoncpp-src-0.5.0.tar.gz
进入到jsoncpp解压目录下,执行命令:
sudosconsplatform=linux-gcc
将/jsoncpp-src-0.5.0/include/目录下的json文件夹拷贝到/usr/local/include/
将jsoncpp-src-0.5.0/libs/linux-gcc-4.9.1/目录下的libjson_linux-gcc-4.9.1_libmt.a拷贝到/usr/local/lib/下,并为了方便使用,将其重命名为libjson.a
Jsoncpp使用说明:
下面通过一个简单的case说明jsoncpp里主要的接口函数,通过这些基本的函数便可以完成的Json文件的解析和处理。
jsoncpp中主要的类:
- Json::Value:可以表示所有支持的类型,如:int,double,string,object,array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载<,<=,>,>=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。
- Json::Reader:将文件流或字符串创解析到Json::Value中,主要使用parse函数。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。
- Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用Json::Writer的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)。
- Json::Reader可以通过对Json源目标进行解析,得到一个解析好了的Json::Value,通常字符串或者文件输入流可以作为源目标。
json示例:
[ {"name":"json", "lines": [ {"line":"1"}, {"line":"2"}, {"cpp":"jsoncpp"}, {"java":"jsoninjava"}, {"php":"support"} ] }, {"name":"c++", "lines": [ {"line":"3"}, {"line":"4"}, {"cpp":"jsoncpp"}, {"java":"jsoninjava"}, {"php":"nosupport"} ] } ]
C++代码:
#include#include #include #include"../src/json/json.h" usingnamespacestd; usingnamespaceJson; voidmain() { fstreamofile("json.json"); stringstrjson; if(!ofile.is_open()){ return; } stringstrline; while(getline(ofile,strline)){ strjson+=strline; } ofile.close(); Json::Readerreader;//读取器 Json::Valueroot;//Value的值值可以是任一对象 if(reader.parse(strjson,root)){ intsize=root.size();//根结点个数 for(intj=0;j 到此这篇关于C++使用jsoncpp解析json的方法示例的文章就介绍到这了,更多相关C++jsoncpp解析json内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。