JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的json解析库的使用方法。json官网上列出了各种语言对应的json解析库,作者仅介绍自己使用过的两种C++的json解析库:jsoncpp(v0.5.0)和Boost(v1.34.0)。
使用JsonCpp前先来熟悉几个主要的类:
Json::Value 可以表示里所有的类型,比如int,string,object,array等,具体应用将会在后边示例中介绍。
Json::Reader 将json文件流或字符串解析到Json::Value, 主要函数有Parse。
Json::Writer 与Json::Reader相反,将Json::Value转化成字符串流,注意它的两个子类:Json::FastWriter和Json::StyleWriter,分别输出不带格式的json和带格式的json。
主要包括:从字符串解析,从文件解析,写入文件,读取文件,输出json,读取json等!
环境配置:将解压下的库,头文件和lib添加到指定的位置(可以工程文件夹也可以是环境变量中);
编写 Makefile文件
测试文件和测试代码
测试文件:test.json
{
"uploadid": "UP000000",
"code": "0",
"msg": "",
"files":
[
{
"code": "0",
"msg": "",
"filename": "1D_16-35_1.jpg",
"filesize": "196690",
"width": "1024",
"height": "682",
"images":
[
{
"url": "fmn061/20111118",
"type": "large",
"width": "720",
"height": "479"
},
{
"url": "fmn061/20111118",
"type": "main",
"width": "200",
"height": "133"
}
]
}
]
}
测试代码:
#include
#include
#include
#include
#include
using namespace std;
//返回字符串的长度
//int getjson(char * buf, string * root)
int getjson(char * buf, string * root)
{
int len = sizeof(*root) ;
memcpy(buf,root,len);
//cout << "buf:"<< buf <
出现乱码:
mingming
0x7ffd2f1f9b80
UP000000
UP000000
type:large
url:fmn061/20111118
type:main
url:fmn061/20111118
{
"lUserID" : 1,
"name" : "jiaojiao"
}
{"lUserID":1,"name":"jiaojiao"}
length:32
1
1
jiaojiao
****
{"lUserID":1,"name":"jiaojiao"}
�#****
�#
32
haha�#
修改程序:用 c_str( )函数将string 对象转换成 char *风格的字符串
#include
#include
#include
#include
#include
using namespace std;
//返回字符串的长度
//int getjson(char * buf, string * root)
int getjson(char *buf, string root)
{
int len = sizeof(root);
memcpy(buf, root.c_str(), len);
//cout << "buf:"<< buf <
mingming
0x7fff019c4890
UP000000
UP000000
type:large
url:fmn061/20111118
type:main
url:fmn061/20111118
{
"lUserID" : 1,
"name" : "jiaojiao"
}
{"lUserID":1,"name":"jiaojiao"}
length:32
1
1
jiaojiao
****
{"lUserID":1,"name":"jiaojiao"}
{"lUserID":1,"name":"jiaojiao"}
6
****
{"lUserID":1,"name":"jiaojiao"}
6
32
haha{"lUserID":1,"name":"jiaojiao"}
6
1
jiaojiao