android cocos2d-x libjson
说一说关于libjson在android上的编译问题
在这里使用的是libjson_7.6.1版本 下载地址:http://sourceforge.net/projects/libjson/files/ ,也可以访问http://json.org.
接下来将source文件夹和JSONOption.h和libjson.h文件复制到自己的项目当中去,并且在android.mk中将需要编译的文件添加进来,进行编译,报错:
jni/http://www.cnblogs.com/Classes/libjson/_internal/Source/JSONNode.cpp:168:5: error: exception handling disabled, use -fexceptions to enable
大致意思是说需要将c++异常捕获打开 所以需要再android.mk文件的 include $(CLEAR_VARS) 下方添加一句"LOCAL_CPPFLAGS += -fexceptions"
再次进行编译 成功!
接下来说下使用libjson解析json数组,代码如下
void HelloWorld::testJson() { const char* str="[[\"tiner\",10,\"NBA\"],[\"james\",0621,\"CHINA\"]]"; JSONNode* node=(JSONNode*)json_parse(str); if (node == NULL) { printf("Invalid JSON Node1\n"); return; } JSONNODE_ITERATOR i = json_begin(node); while (i != json_end(node)) { if (*i == NULL) { printf("Invalid JSON Node2\n"); return; } // recursively call ourselves to dig deeper into the tree if (json_type(*i) == JSON_ARRAY) { parseArrJSON(*i); } i++; } } void HelloWorld::parseArrJSON(JSONNODE *n) { if (n == NULL) { CCLOG("Invalid JSON Node\n"); return; } JSONNODE_ITERATOR it = json_begin(n); while (it != json_end(n)) { if (*it == NULL) { CCLOG("Invalid JSON Node\n"); return; } CCLog("NAME:%s",json_as_string(*it));it++; CCLog("NUMBER:%d",json_as_int(*it));it++; CCLog("WHERE:%s",json_as_string(*it)); ++it; } }
输出:
Cocos2d: NAME:tiner
Cocos2d: NUMBER:10
Cocos2d: WHERE:NBA
Cocos2d: NAME:james
Cocos2d: NUMBER:621
Cocos2d: WHERE:CHINA
-------------------------------------------------------------------------------------------------------------------------------
cocos2d-x 2.1.3 使用json
1.解析同等级: const char* text= "{\"record\":{\"data\":20130101,\"rate\":23,\"buy\":1},\"record\":{\"data\":45,\"rate\":67,\"buy\":1},\"record\":{\"data\":45,\"rate\":76,\"buy\":10}}"; Json* root= Json_create(text); Json* _record=root->child; while(_record) { Json* _date=Json_getItem(_record, "data"); if(_date->type==Json_Number) { int date= _date->valueint; CCLOG("Date:%d",date); } Json* _rate=Json_getItem(_record, "rate"); if(_rate->type==Json_Number) { int rate=_rate->valueint; CCLOG("Rate:%d",rate); } Json* _buy=Json_getItem(_record, "buy"); if(_buy->type==Json_Number) { int buy=_buy->valueint; CCLOG("Buy:%d",buy); } _record=_record->next; } Json_dispose(root); 2.解析不同等级
char* text="{\"status\":10,\"body\":{\"force\":5,\"latest\":{\"ver\":\"2.0\",\"ver_num\":\"200\"}}}"; Json* _root= Json_create(text); Json* _status = Json_getItem(_root, "status"); if(_status->type==Json_Number) { int status_text= _status->valueint; CCLOG("status_text:%d",status_text); } Json* _bodyArray=Json_getItem(_root, "body"); if(_bodyArray->type==Json_Object) { Json* _force=Json_getItem(_bodyArray, "force"); if(_force->type==Json_Number) { int _force_text=_force->valueint; CCLOG("_force_text:%d",_force_text); } Json* _latestArray=Json_getItem(_bodyArray, "latest"); if(_latestArray->type==Json_Object) { Json* _ver=Json_getItem(_latestArray, "ver"); if(_ver->type==Json_String) { const char* _ver_text=_ver->valuestring; CCLOG("_ver_text:%s",_ver_text); } Json* _ver_num=Json_getItem(_latestArray, "ver_num"); if(_ver_num->type==Json_String) { const char* _ver_num_text=_ver_num->valuestring; CCLOG("_ver_num_text:%s",_ver_num_text); } } } Json_dispose(_root);