这是有效的yaml吗?

时间:2012-03-24 10:34:54

标签: yaml yaml-cpp

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

这是本文档的另一个尝试,它没有复合列表(我想这就是它的调用方式)。

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

这两个yaml文件中哪一个有效?我仍然想知道我是否可以使用这样的键控列表列表(嵌套列表?):

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

2 个答案:

答案 0 :(得分:4)

您可以使用它来检查您的yaml是否正常:yamlint

看起来没问题。

答案 1 :(得分:3)

是的,它是有效的YAML(嗯,前两个是;在第三个中,确保在序列中-之后有空格);但它可能不完全符合您的想法。在你的玩具示例中

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

items相关联的值是一个序列;并且该序列的每个条目都是具有单个键/值对的映射(对于第一个条目,键为list1,在第二个条目中为list2)。

在您的第一个真实示例中可能让您困惑的是如何访问每个元素。既然你标记了这个yaml-cpp,那么你可以在第一个例子的温室里找到玩具清单:

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

(在访问“树屋”和“玩具”键之前请注意[0]。)