Json 文件解析 (cocos2dx version 2.2.0)


原来已经写过对 Json 文件进行过多次解析与应用,其实最好还是实现一些简单的封装整理。


很简单,上菜:

CSJson::Value HelloWorld::getJsonFromData(const std::string &data)
{
	unsigned long length = 0;
	length = data.length();
	CCAssert(length > 0, "Json: File is not exists!");
	CSJson::Reader reader;
	CSJson::Value root;

	if  (!reader.parse((const char*)data.c_str(), (const char*)(&data + length), root, false ))
	{
		CCAssert(false, "CSJson::Reader Parse error!");
	}
	return root;
}

上述模块只是简单的封装使用,本文暂不适用上述函数。




首先,看一下 Json 字符串信息:

(Json本是一个字符串,你可以通过 JsonView 工具对其进行格式化处理,看到的内容格式就是如下的格式)

{
    "total_number": 29,
    "period": 1,
    "scope": 1,
    "rank_key": 5555,
    "rank_group": 1,
    "ranks": [
        {
            "created_at": "Tue Apr 22 17:54:13 +0800 2014",
            "created_at_long": 1398160453776,
            "score": "1900000000",
            "history_score": "0",
            "order": 1,
            "group": 1,
            "period": 1,
            "user": {
                "id": 1159303374,
                "screen_name": "0\u8273\u5b500",
                "name": "0\u8273\u5b500",
                "province": "11",
                "city": "5",
                "location": "\u5317\u4eac \u671d\u9633\u533a",
                "profile_image_url": "http:\/\/tp3.sinaimg.cn\/1159303374\/50\/5677572800\/0",
                "profile_url": "hesper0000",
                "domain": "hesper0000",
                "gender": "f",
                
            }
        }
     ]
}


对该 Json 串进行解析:

#include "CocoStudio/Json/lib_json/reader.h"
#include "CocoStudio/Json/lib_json/value.h"

int HelloWorld::praseJson()
{
	// 步骤一:对最外层{} 进行读取 
	unsigned long size = 0;
	unsigned char* pData = nullptr;
	pData = CCFileUtils::sharedFileUtils()->getFileData("config.json", "rb", &size);
	if (!pData)
		return -1;

	CSJson::Reader j_reader;
	CSJson::Value root_value;

	if (!j_reader.parse((const char*)pData, (const char*)(pData+size), root_value))
	{
		CC_SAFE_DELETE_ARRAY(pData);
		return -1;
	}

	int id = root_value["total_number"].asInt();

	// 步骤二:对ranks[] 数组进行解读
	CSJson::Value ranksInfoArray = root_value["ranks"];
	CCLog("ranksInfoArray.size() = %d", ranksInfoArray.size());
	for (unsigned int i=0; i<ranksInfoArray.size(); i++)
	{
		// 步骤三:对ranks[] 数组中每个元素进行解析
		CSJson::Value userRankArray = ranksInfoArray[i];
		std::string score = userRankArray["score"].asString();

		// 步骤四:对 user 进行解析
		CSJson::Value eachUser = userRankArray["user"];
		std::string name = eachUser["name"].asString();
	}

	return 0;
}


一层一层去解析,至于其中的种种逻辑变化和处理,具体情况还需要具体分析。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值