色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

cocos2d-x json轉(zhuǎn)map

傅智翔1年前6瀏覽0評論

cocos2d-x是一款開源的游戲引擎,可以方便地創(chuàng)建跨平臺(tái)的2D游戲。在游戲開發(fā)中,時(shí)常需要用到j(luò)son來存儲(chǔ)、傳遞游戲相關(guān)的數(shù)據(jù),而將json轉(zhuǎn)換為map是非常常見的工作之一。下面就來介紹一下cocos2d-x中如何實(shí)現(xiàn)json轉(zhuǎn)map的方法。

// 示例json數(shù)據(jù)
{
"name": "小明",
"age": 18,
"address": {
"province": "廣東",
"city": "深圳"
},
"hobbies": [
"籃球",
"游戲"
]
}
// 在C++中實(shí)現(xiàn)json轉(zhuǎn)map
#include "cocos2d.h"
#include "json/document.h"
#include "json/rapidjson.h"
USING_NS_CC;
using namespace rapidjson;
void parseJson(const std::string& jsonStr, Map& outData) {
Document doc;
doc.Parse<0>(jsonStr.c_str());
if (doc.HasParseError()) {
log("parse json error");
return;
}
outData.clear();
// 遍歷json數(shù)據(jù),轉(zhuǎn)換為map格式
for (auto iter = doc.MemberBegin(); iter != doc.MemberEnd(); ++iter) {
std::string key = iter->name.GetString();
const Value& value = iter->value;
if (value.IsString()) {
std::string sValue = value.GetString();
outData.insert(key, Value(sValue));
} else if (value.IsInt()) {
int iValue = value.GetInt();
outData.insert(key, Value(iValue));
} else if (value.IsObject()) {
MapsubValue;
parseJson(value.GetString(), subValue);
outData.insert(key, Value(subValue));
} else if (value.IsArray()) {
VectorarrValue;
for (auto& subValue : value.GetArray())
{
arrValue.pushBack(Value(subValue.GetString()));
}
outData.insert(key, Value(arrValue));
}
}
}
// 使用示例
std::string jsonStr = "{...}"; // 假設(shè)這里有一段json數(shù)據(jù)
MapmapData;
parseJson(jsonStr, mapData);
log("name: %s", mapData.at("name").asString().c_str());

上面的代碼中使用了cocos2d-x自帶的Map和Value數(shù)據(jù)結(jié)構(gòu),它們可以方便地存儲(chǔ)任意類型的數(shù)據(jù)。對于json中的每個(gè)節(jié)點(diǎn),在代碼中使用遞歸的方式將其轉(zhuǎn)換為相應(yīng)的map格式。其中,Value類中的as*系列方法可以讓我們方便地獲取存儲(chǔ)的數(shù)據(jù)。

總之,cocos2d-x中實(shí)現(xiàn)json轉(zhuǎn)map非常簡單,只需要使用自帶的json庫和數(shù)據(jù)結(jié)構(gòu)就可以完成。希望本文能對讀者有所幫助。