花了一整个下午的时间在网上查找资料,了解不同的json库进行对比。
找到的有libjson、jsonCpp和JsonBox
根据使用的难易程度首先选择JsonBox,确实看起来更简单些,但是编译到Eclipse上会有error:undefined reference to 'JsonBox::Value::Value()'这样的错误,在网络里花费了好久的时间也没有找到解决方案。于是最终舍弃。
在libjson和jsonCpp对比中,网上有人说libjson的解析速率更加,于是转向libjson,但将它编译在Eclipse上的教程基本上也没在网上找着。
然后,在不断查找。。不断查找。。不断查找的过程中,看到了一篇文章讲 Cocos2d-x 2.2.0以上版本已有jsoncpp库,而我恰好用的是2.2.2版本的,所以一切的问题还在源头,舍近求远饶了一大圈。根据某楼主的方法,我一个一个的搜索Android.mk文件,最终在extensions/spine路径下有json.h和json.cpp文件。
搞得一整个下午头昏昏沉沉的,不该啊!多么痛的领悟!想想以后想办法一定还得从源头来!
在网上看到个讲解Cocos2d-x自带json库的教程,自己记录下,也分享下。
找到的有libjson、jsonCpp和JsonBox
根据使用的难易程度首先选择JsonBox,确实看起来更简单些,但是编译到Eclipse上会有error:undefined reference to 'JsonBox::Value::Value()'这样的错误,在网络里花费了好久的时间也没有找到解决方案。于是最终舍弃。
在libjson和jsonCpp对比中,网上有人说libjson的解析速率更加,于是转向libjson,但将它编译在Eclipse上的教程基本上也没在网上找着。
然后,在不断查找。。不断查找。。不断查找的过程中,看到了一篇文章讲 Cocos2d-x 2.2.0以上版本已有jsoncpp库,而我恰好用的是2.2.2版本的,所以一切的问题还在源头,舍近求远饶了一大圈。根据某楼主的方法,我一个一个的搜索Android.mk文件,最终在extensions/spine路径下有json.h和json.cpp文件。
搞得一整个下午头昏昏沉沉的,不该啊!多么痛的领悟!想想以后想办法一定还得从源头来!
在网上看到个讲解Cocos2d-x自带json库的教程,自己记录下,也分享下。
放下链接:http://blog.youkuaiyun.com/u012945598/article/details/17398925
----------------------------------------------------------------------------------------------------------------------------
以上内容是昨天下午写的,写完按照以上链接讲解编译出现错误,发现有问题后,先删除了。
声明:非以上链接讲解错误而导致的编译错误,完全是因为笔者眼神有问题,漏看了链接文章里括号中的重要信息!!!
问题在以上黄色标记处,2.2.2版本的json库是rapidjson,引用命名空间不再是using namespace CSJson; 而是using namespace rapidjson;!!!
经过验证完全可以解析包含json数据的字符串内容。
变量string resultData存放的json数据内容为:
[{"rid":1,"roomName":"hi","roomOwner":"yc","playerNum":2,"gameState":0},{"rid":2,"roomName":"hello","roomOwner":"y","playerNum":3,"gameState":0}]
以下内容是对以上数据解析的代码
Document d;
d.Parse<0>(resultData.c_str());
const Value &array = d;
assert(array.IsArray());
for(SizeType i=0; i<array.Size(); i++){
CCLOG("resultData:rid=%d roomName=%s roomOwner=%s playerNum=%d gameState=%d\n",
array[i]["rid"].GetInt(),array[i]["roomName"].GetString(),
array[i]["roomOwner"].GetString(),array[i]["playerNum"].GetInt(),
array[i]["gameState"].GetInt());
}
控制台输出的数据为: