C++使用JsonCpp库操作json格式数据示例
本文实例讲述了C++使用JsonCpp库操作json格式数据的方法。分享给大家供大家参考,具体如下:
前言
JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择
JSON的全称为:JavaScriptObjectNotation,顾名思义,JSON是用于标记javascript对象的,详情参考http://www.json.org/。
本文选择第三方库JsonCpp来解析json,JsonCpp是比较出名的c++解析库,在json官网也是首推的。
JsonCpp简介
JsonCpp主要包含三种类型的class:ValueReaderWriter。
jsoncpp中所有对象、类名都在namespacejson中,包含json.h即可。
注意:Json::Value只能处理ANSI类型的字符串,如果C++程序使用Unicode编码的,最好加一个Adapt类来适配。
下载和编译
本文运行环境是:Redhat5.5+g++version4.6.1+ GNUMake3.81+jsoncpp-0.5.0
下载地址是:http://sourceforge.net/projects/jsoncpp/
解压之后得到jsoncpp-src-0.5.0文件夹,我们只需要jsoncpp的头文件和cpp文件,其中jsonscpp的头文件位于jsoncpp-src-0.5.0\include\json,jsoncpp的cpp文件位于jsoncpp-src-0.5.0\src\lib_json。
这里我列出我们的工作目录:
jsoncpp/ //工作目录
|--include //头文件根目录
||--json //json头文件,对应jsoncpp-src-0.5.0\include\json
|--src //cpp源码文件根目录
|--json //jsoncpp源码文件,对应jsoncpp-src-0.5.0\src\lib_json
|--main.cpp //我们的主函数,调用jsoncpp的示例代码
|--makefile //makefile,不用我们多说了吧,不懂请看本站相关的makefile用法实践
反序列化Json对象
假设有一个json对象如下:
{ "name":"json″, "array":[ { "cpp":"jsoncpp" }, { "java":"jsoninjava" }, { "php":"support" } ] }
我们要实现这个json的反序列号代码如下:
voidreadJson(){ usingnamespacestd; std::stringstrValue="{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}"; Json::Readerreader; Json::Valuevalue; if(reader.parse(strValue,value)) { std::stringout=value["name"].asString(); std::cout<序列化Json对象
voidwriteJson(){ usingnamespacestd; Json::Valueroot; Json::ValuearrayObj; Json::Valueitem; item["cpp"]="jsoncpp"; item["java"]="jsoninjava"; item["php"]="support"; arrayObj.append(item); root["name"]="json"; root["array"]=arrayObj; root.toStyledString(); std::stringout=root.toStyledString(); std::cout<完整实例代码点击此处本站下载。
下载之后,执行以下命令
unzipjsoncpp.zip cdjsoncpp make ./mainPS:关于json操作,这里再为大家推荐几款比较实用的json在线工具供大家参考使用:
在线
JSON代码检验、检验、美化、格式化工具: http://tools.jb51.net/code/json
JSON在线格式化工具:
http://tools.jb51.net/code/jsonformat在线XML/
JSON互相转换工具: