这篇主要写怎么使用Cocos2d-x 3.x版本 解析Json。
以下代码确保在 cocos2d-x 3.1.1版本 有效.
cocos2d-x 3.x版本自带了rapidjson来提供对Json的解析。
先小小普及一下Json常识,Json字符串里面”]“扩起来的是数组(Array),而”{}”扩起来的是对象(Object),清楚这点,将对阅读下面代码有帮助。
在使用rapidjson前,需要引用json/document.h头文件
#include "json/document.h"
准备要解析的json文件,将其放在资源文件夹(Resources)下.
这里我使用准备好的unit.json文件,该文件储存着一名单位的属性。
{
"id": "1001",
"title":
"Good boy",
"Naughty"
],
"hp": 100,
"attacknum": 5,
"attackinterval": 1.2,
"father": {
"id": "1000",
"age": 40
}
}
原谅这不恰当的例子。
同时,下面的代码仅仅只为列出使用方法。
//获取完整路径
auto filePath = FileUtils::getInstance()->fullPathForFilename("unit.json");
//获取json字符串
auto contentStr = FileUtils::getInstance()->getStringFromFile(filePath);
rapidjson::Document doc;
doc.Parse<0>(contentStr.c_str());
////////////////////////////////////////////////////////////////////
// 这里需要注意,使用rapidjson::Value时,需要注明rapidjson命名空间,
// 不然会报错.因为cocos2d命名空间也有Value类,若不注明,会产生二意性
rapidjson::Value& valId = doc"id"];
CCLOG("id : %s", valId.GetString());
rapidjson::Value& valTitle = doc"title"];
if (valTitle.IsArray())//判断是否为数组
{
输出结果:
id : 1001
title 0 : Good boy
title 1 : Naughty
father id : 1000
father age : 40
hp : 100
attacknum : 5
attackinterval : 1.200000
如果有什么问题或者建议…
那么…
请在下方留言(有种放学别跑!)
原创文章,转载请注明出处: