如何使用 Rapidjson 解析文件获得"node"?

How to get a "node" parsing a file with Rapidjson?

本文关键字:node 文件 何使用 Rapidjson      更新时间:2023-10-16

我正在使用Rapidjson从文件中检索数据,我想使用该文件数据在游戏中创建实体。因此,我的文件定义了某个实体是什么(在本例中,每个船舶的参数和要创建的组件)。文件如下(对于一艘名为无畏舰的船只):

{
    "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();

提前谢谢。

好吧,我偶然发现了一些目前可以工作的东西,尽管我仍然需要检查它是否足以满足我的需求。

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

所以这就是我想要的。