cocos2d-x 3.x json解析

这篇主要写怎么使用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

如果有什么问题或者建议…

那么…

请在下方留言(有种放学别跑!)

原创文章,转载请注明出处:

http://tianyiyanblog.sinaapp.com/?p=26

1赞

给力。。。。终于弄好了

我将引擎从3.1升级到3.10后,rapidjson就出问题了,错误提示:,/Users/panxiling/Desktop/MyProject/TestPaper/Classes/Manager/HttpNetManager.cpp:96:33: Calling a private constructor of class ‘rapidjson::GenericStringRef’
请问怎么解决