2015-09-10 11 views
5

के साथ yaml पार्सिंग मैं एक yaml usign yaml-cpp का विश्लेषण करने की कोशिश कर रहा हूं। "नोड ऊंचाई मौजूद नहीं है": यह मेरा YAML है: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 

जब मैं

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; 

मैं संदेश प्राप्त हो रहा है। मैं उस क्षेत्र (और अन्य?) तक कैसे पहुंच सकता हूं

बहुत बहुत धन्यवाद!

उत्तर

4

आपके द्वारा - के साथ उपयोग किए गए वाक्यविन्यास सरणी तत्व बनाता है। इसका मतलब यह है कि आप (JSON अंकन में) बना रहे हैं:

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

लेकिन क्या आप चाहते हैं:

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

सौभाग्य से समाधान आसान है।

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

ध्यान दें कि मैं भी version: 1.0

से पहले widht चौड़ाई का एक टाइपो एक बाहरी अंतरिक्ष तय की और हटा दिया है आप सोच रहे हैं कि आप कैसे होगा: बस गलत - वर्णों को हटा दें असल में आपके कॉन्फ़िगरेशन तक पहुंचने के लिए, अब आपको एक सरणी एक्सेस करना होगा:

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

स्पष्ट रूप से यह rathe होगा यदि आप वास्तव में इसे इस तरह से चाहते थे, तो इसका मतलब यह है कि अब आप चाबियों का उपयोग नहीं करते हैं, लेकिन सरणी स्तर से छुटकारा पाने के लिए या तो ऑर्डर केस या कॉन्फ़्रेंस को पुन: प्रोसेस करना होगा।

+0

धन्यवाद मेरे सिर के लिए @ कोर्बिन! यह बहुत अच्छा काम करता है! मुझे बहुत अधिक दस्तावेज और उदाहरण नहीं मिला! – jmoren