一、了解jscon结构
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为value5、数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
例子:[{"name":"大陆剧","id":"203"},{"name":"故事剧","id":"207"},{"name":"古装剧","id":"208"}],数组由三个元素组成,每个元素都是一个object。
#include "json/json.h"...Json::Reader reader;Json::Value value;if(reader.parse(strResponse, value)){Json::Value arrObj = value["data"];for(i=0; i
string str = statis["comment"].asString();
}}
以上是解析简单json结构的,对于复杂的嵌套结构解析类似,都是通过Json::Value tmp=value[key]获取下一层的结构,然后Json::Value subTmp=key[subkey],最后通过string strResult = subTmp[node].asString();或者int iResult = subTmp[node].asInt();即可。
对于负责的例子,如:
{"data":[{"statistics":{"dislike_count":0,"comment":"tianqihao"},"snippet":{"original":0,"privacy":"anybody","category":{"letter_id":"u","name":"娱乐","id":86}}},.....]
想要解析letter_id,可通过如下方法:
1.string test1 = arrObj[i]["snippet"]["category"].get("letter_id", “a").asString();
2.string test2 = arrObj[i]["snippet"]["category"]["letter_id"].asString();
3.通过Json::Value先后获取snippet、category,之后category["letter_id"].asString();
g++ -g -o exx *.cpp -I path/include path/libjson_linux-gcc-4.1.2_libmt.a
编译获取会遇到的问题:
在使用过程中,我习惯性的将头文件和库文件分别放到我自己的工作目录下,即将json相关的头文件全放在自己的inc文件夹下,导致编译出错,报错如下:
/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下
相关链接:
1. />
2. />
3.http://www.cnblogs.com/kingcat/archive/2012/06/14/2549050.html //安装,但存在问题
4.http://www.cnblogs.com/kex1n/archive/2011/12/02/2272328.html //jsoncpp的简单使用
5.http://blog.csdn.net/timothy721/article/details/19993495 //
6. //rapidjson和jsoncpp的对比