我正在使用 Rapidjson
从文件中检索数据,我想使用该文件数据在游戏中创建实体。因此,我的文件定义了某个实体是什么(在这种情况下,每个船舶参数和要创建的组件)。文件看起来如下(对于一艘名为dreadnought的船):
{
"dreadnought" : {
"parameters": {
"image": "data/dreadnought/dreadnought_ship.png",
"linearSpeed" : 10,
"angularSpeed" : 20,
"energy" : 20,
"hitpoints" : 50
},
"components" : {
"primaryWeapon" : {
"name" : "fusionBlaster",
"energyConsumed" : 2,
"cooldown" : 5
},
"secondaryWeapon" : {
"name" : "laserBots",
"energyConsumed" : 2,
"cooldown" : 5
},
"ai" : {
"name" : "dreadnoughtAI"
}
}
}
}
我想要的是将“无畏”作为一个对象变成一个变量,这样我就可以继续查询这个变量了。类似于使用 Rapidxml
解析XML时所执行的操作:
xml_document<> doc;
doc.parse<0>((char*)buffer.ToCString());
xml_node<>* rootNode = doc.first_node();
xml_node<>* innerNode = rootNode->first_node("x");
我无法得到的是innerNode
。我想要这样的东西:
rapidjson::Object dreadnought;
dreadnought.HasMember("parameters");
...
我试图以这种方式创建一个对象,但是我找不到应该放在模板中的内容,我甚至不知道这个GenericObject
是否是我需要的:
rapidjson::GenericObject<false, typename ValueT> dreadnought = m_doc["dreadnought"].GetObject();
提前致谢。
答案 0 :(得分:0)
好吧,我随便找到了一些现在可以使用的东西,虽然我仍然需要检查它是否足够我想要的东西。
const rapidjson::Value &dreadnought = m_doc["dreadnought"];
for (rapidjson::Value::ConstMemberIterator itr = dreadnought.MemberBegin();
itr != dreadnought.MemberEnd(); ++itr) {
std::cout << "name : " << itr->name.GetString() << std::endl;
}
这样,每次调用包含该代码的函数时,都会显示:
name : parameters
name : components
所以这就是我想要的。