2015-09-10 21 views
5

yaml usign yaml-cppを解析しようとしています。私はメッセージを取得していますyamlをyaml cppで解析する

YAML::Node basenode = YAML::LoadFile("./path/to/file.yaml"); 
int height; 
if(basenode["configuration"]) 
    if(basenode["configuration"]["height"] 
     height = basenode["configuration"]["height"].as<int>(); 
    else 
     cout << "The node height doesn't exist" << endl; 
else 
    cout << "The node configuration doesn't exist" << endl; 

を行うと

--- 
configuration: 
    - height: 600 
    - widht: 800 
    - velocity: 1 
    - scroll: 30 
types: 
    - image: resources/images/grass.png 
    name: grass 
    - image: resources/images/water.png 
    name: water 
version: 1.0 

:これは私のYAMLである "ノードの高さが存在しません"。どうすればそのフィールド(と他のフィールド)にアクセスできますか?

ありがとうございます!

答えて

4

-で使用した構文は、配列要素を作成します。これは、あなたが(JSON表記で)作成していることを意味します

{configuration: [{height: 600}, {width: 800}, {velocity: 1}, {scroll: 30}]} 

しかし、あなたが望むことは次のとおりです。

{configuration: {height: 600, width: 800, velocity: 1, scroll: 30}} 

幸いにも解決策は簡単です。あなたはどのようにあなたが希望迷っているならば、私はまた、幅にwidhtの誤植を修正しversion: 1.0

前に余分なスペースを削除した

--- 
configuration: 
    height: 600 
    width: 800 
    velocity: 1 
    scroll: 30 
types: 
    - image: resources/images/grass.png 
    name: grass 
    - image: resources/images/water.png 
    name: water 
version: 1.0 

注:ただ、誤った-文字を削除実際に現在の設定に実際にアクセスするには、配列アクセスを行う必要があります:

int height = basenode["configuration"][0]["height"].as<int>(); 
int height = basenode["configuration"][1]["width"].as<int>(); 

明らかにこれはratheあなたがキーを使用することはもうなくなりましたが、配列のレベルを取り除くためには、設定を再処理するか、設定を再処理する必要があるからです。

+0

ありがとうございます@Corbinは私の頭をクリア!それは素晴らしい作品です!私は非常に多くのドキュメンテーションとサンプルを見つけられませんでした! – jmoren

関連する問題