2012-03-24 118 views
1
items: 
    house: 
     - bathroom: 
      - toothbrush 
      - soap 
     - bedroom: 
      - bed: 
       - pillow 
       - sheet 
      - closet: 
       - clothes: 
        - underwear 
        - socks 
    garden: 
     - treehouse: 
      - toys: 
       - nerfgun 
       - car 
      - window 

     - garage: 
      - car 
      - toolbox: 
       - hammer 
       - scewdriver 
       - pliers 
      - lawnmower 

這是另一個嘗試在這個文件,它沒有複合列表(我想這就是它的名字)。這是有效的yaml嗎?

items2: 
    house: 
     - bathroom: 
      - toothbrush 
      - soap 
     - bedroom: 
      - bed: 
       - pillow 
       - sheet 
      - closet: 
       - clothes: 
        - underwear 
        - socks 

這兩個yaml文檔中的哪一個是有效的?我一直在想,如果我可以用這樣的鍵列表的列表(嵌套列表):

items: 
    - list1: 
     -itemA 
     -itemB 
    - list2: 
     -itemC 
     -itemD 
+0

所以它是有效的yaml,但它沒有做我認爲它會做的 – jokoon 2012-03-24 16:24:35

回答

4

您可以使用此功能來檢查,如果你的YAML是確定的:yamlint

這似乎確定。

+0

我不明白爲什麼它在破折號後放一條新線 – jokoon 2012-03-24 16:25:34

+0

以及我也沒有。對於演示文稿可能?無論如何,你的yaml仍然有效。 – Vodun 2012-03-24 16:45:24

3

是的,它是有效的YAML(好吧,前兩個是;在第三個,確保你有一個空間後-序列);但它可能並不完全符合你的想法。在您的玩具示例中

items: 
    - list1: 
     - itemA 
     - itemB 
    - list2: 
     - itemC 
     - itemD 

items相關的值是一個序列;並且該序列的每個條目都是具有單個鍵/值對的映射(對於第一個條目,鍵爲list1,第二個爲list2)。

在您的第一個實例中,您可能會困惑的是如何訪問每個元素。既然你標記這個yaml-cpp,這裏是你將如何得到的,說,在你的第一個例子中的溫室玩具名單:

doc["items"]["garden"][0]["treehouse"][0]["toys"]; 

(注意[0]訪問「樹屋」和「玩具」鍵之前。 )