cocos2dx如何解析json

       由于项目需要json格式解析,一开始没接触过 所以比较烦恼,不过现在都可以理解了,给大家分享学习一下,我用的cocos2dx版本是2.2.1

如下先添加头文件:

#include "HelloWorldScene.h"
#include "json_lib.h"
using namespace std;
USING_NS_CC;
这里写了两个函数

//这里为获取jsonvalue的值
CSJson::Value HelloWorld::getJsonFromFile(const char* fileName){  
	CSJson::Reader reader;  
	CSJson::Value jsValue;
	unsigned long ilength;
	//这里是将文件解析出来,付给pBuffer字符串(之前自己没接触过 没写这句搞得很头痛....)
	char* pBuffer = (char *)CCFileUtils::sharedFileUtils()->getFileData(getFullPath(fileName).c_str(), "r", &ilength);
	CCLog("%s",pBuffer);
	//这里将pBuffer的值付给jsValue值
	bool parseRet = reader.parse(pBuffer, jsValue, false);
	CCAssert(parseRet, "Read GridData Error~!!!!!!!!!");
	return jsValue;  
}  
第二个函数

//这里为获取资源路径
std::string HelloWorld::getFullPath(const char* path){  
	CCLOG(cocos2d::CCFileUtils::sharedFileUtils()->fullPathForFilename(path).c_str());
	return cocos2d::CCFileUtils::sharedFileUtils()->fullPathForFilename(path);  
}  

最后在init里面写上

        CSJson::Reader read;
	CSJson::Value myjson = getJsonFromFile("jsontest.json");//利用上面的函数生成一个json。  
	string name;
	int i=0;
	//这里为遍历整个jsonvalue的值
	for (CSJson::ValueIterator a=myjson.begin(); a!=myjson.end(); ++a) {
		
		CSJson::Value value=(CSJson::Value)*a;
		name=value["name"].asString();
		CCLOG("myjson:%s",name.c_str());
		CCLOG("leftBottom:%s",value["leftBottom"].asCString());
		CCLOG("leftTop:%s",value["leftTop"].asCString());
		CCLOG("rightBottom:%s",value["rightBottom"].asCString());
		CCLOG("rightTop:%s",value["rightTop"].asCString());
		CCLOG("position:%s",value["position"].asCString());
                //两种打印方式,可以选择上面字符是我的字段
		name=myjson[i]["name"].asString();
		CCLOG("myjson:%s",name.c_str());
		CCLOG("leftBottom:%s",myjson[i]["leftBottom"].asCString());
		CCLOG("leftTop:%s",myjson[i]["leftTop"].asCString());
		CCLOG("rightBottom:%s",myjson[i]["rightBottom"].asCString());
		CCLOG("rightTop:%s",myjson[i]["rightTop"].asCString());
		CCLOG("position:%s",myjson[i]["position"].asCString());
		i++;
	}

然后就可以打印出来了 ,祝你也能成功!!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章