2015-09-10 16 views
5

Próbuję parsować yaml usign yaml-cpp. To jest mój yaml:Parsowanie yaml z yaml cpp

--- 
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 

Kiedy zrobić

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; 

otrzymuję komunikat: "Wysokość węzeł nie istnieje". Jak mogę uzyskać dostęp do tego pola (i innych?)

Wielkie dzięki!

Odpowiedz

4

Składnia użyta przez użytkownika - tworzy elementy tablicy. Oznacza to, że podczas tworzenia (w notacji JSON):

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

Ale to, co chcesz:

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

szczęście rozwiązanie jest proste. Wystarczy usunąć błędne - znaki:

--- 
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 

Zauważ, że ja również Poprawiono literówkę o szer do szerokości i usuwane z obcym przestrzeń przed version: 1.0

Jeśli zastanawiasz się, jak byś W rzeczywistości dostęp do konfiguracji jest teraz taki, jak teraz, musisz uzyskać dostęp do tablicy:

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

Oczywiście byłby to r nieprzyjemny, jeśli faktycznie chciałeś tego, ponieważ oznacza to, że nie będziesz już używać kluczy, ale musiałbyś zlecić porządek lub przerobić konfigurację, aby pozbyć się poziomu tablicy.

+0

dziękuję @Corbin za oczyszczenie mojej głowy! działa świetnie! Nie znalazłem zbyt wiele dokumentacji i przykładów! – jmoren