2016-04-09 17 views
0

私はRapidjsonを使用してファイルからデータを取得しています。そのファイルデータを使用してゲームのエンティティを作成したいとします。したがって、私のファイルには、特定のエンティティ(この場合、各船のパラメータと作成されるコンポーネント)の定義があります。 (ドレッドノートと呼ばれる単一の船のために)、以下のようなファイルが見えます: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です。私は、オブジェクトをこのように作成しようとしましたが、私は、私は、テンプレート内に置く必要があるものを見つけることができず、このGenericObjectは何私の場合は私も知らない

rapidjson::Object dreadnought; 
dreadnought.HasMember("parameters"); 
... 

:私のような何かをしたいと思います必要:

rapidjson::GenericObject<false, typename ValueT> dreadnought = m_doc["dreadnought"].GetObject(); 

ありがとうございます。

答えて

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 

だからこれは私が欲しかったものです。

+0

これは、オブジェクト内のキーと値のペアを反復する方法です。 –

関連する問題