分类: C/C++
2015-09-07 21:07:09
1、值(value)可以是双引号括起来的字符串(string)、数值(number)、true
、false
、 null
、对象(object)或者数组(array)。这些结构可以嵌套。
2、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
字符串(string)与C或者Java的字符串非常相似。
3、数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
4、对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
举个例子:{"letter_id":"u","name":"Kaede","id":21},其中letter_id、name、id都可以理解为string;而u、kaede、21为value
5、数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
例子:[{"name":"大陆剧","id":"203"},{"name":"故事剧","id":"207"},{"name":"古装剧","id":"208"}],数组由三个元素组成,每个元素都是一个object。
二、jsoncpp环境搭建jsoncpp的使用需要自己提前编译,生成对应的库,之后引用头文件、链接库即可使用编译jsoncpp需要scons
我使用的版本分别是
jsoncpp-src-0.5.0(目前有更新版本0.6.0)
下载地址为: style="font-family:'Verdana, Arial, Helvetica, sans-serif';">
scons-2.1.0(目前有更新版本2.3.5)
下载地址为: style="font-family:'Verdana, Arial, Helvetica, sans-serif';">
1.首先拷贝两个压缩包到制定路径下,解压scons,进入解压目录
export MYSCONS=`pwd`
2.然后执行命令
python $MYSCONS/setup.py install
3.解压缩jsoncpp,并进入对应路径下,执行命令
python $MYSCONS/script/scons platform=linux-gcc
执行后会在目录jsoncpp-src-0.5.0/libs/linux-gcc-4.1.2下生成libjson_linux-gcc-4.1.2_libmt.a libjson_linux-gcc-4.1.2_libmt.so两个库文件
至此,环境搭建好了
所需要的头文件在:jsoncpp-src-0.5.0/include/json这个路径下
之后在程序中引用即可。
三、jscon的简单解析
对于解析json串来说,只需要用到两种类型Json::Reader 和 Json::Value
举一个例子,现有json串如下:
string strResponse的内容为{"data":[{"statistics":{"dislike_count":41,"comment":"tianqihao"}},{"statistics":{"dislike_count...}]}...(省略了部分信息)
可见,data关键字对应一个数组;而statistics关键字对应一个object;dislike_count和comment_count为string;41和tianqihao为value。
#include "json/json.h"
...
Json::Reader reader;
Json::Value value;
if(reader.parse(strResponse, value))
{
Json::Value arrObj = value["data"];
for(i=0; i<arrObj.size(); i++)
{
if(!arrObj[i].isMember("statistics"))
continue;
Json::Value statis = arrObj[i]["statistics"];
int iDisLike = statis["dislike_count"].asInt();
string str = statis["comment"].asString();
}
}
/usr/include/sys/cdefs.h:46:44: 错误:标识符“(”前缺少二元运算符
/usr/include/sys/cdefs.h:50:44: 错误:标识符“(”前缺少二元运算符
/usr/include/sys/cdefs.h:135:19: 错误:标识符“(”前缺少二元运算符
/usr/include/sys/cdefs.h:151:19: 错误:标识符“(”前缺少二元运算符
问题是必须保留include/json/这种结构,不能一股脑的将include/json下的文件拷出到inc下