原来已经写过对 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;
}
一层一层去解析,至于其中的种种逻辑变化和处理,具体情况还需要具体分析。