linux+cppjson编译,linux下jsoncpp的安装与使用

一、了解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的对比

你可能感兴趣的:(linux+cppjson编译)