Это действительный yaml?

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 ответа

Решение

Вы можете использовать это, чтобы проверить, в порядке ли ваш yaml: yamlint

Кажется, все в порядке.

Да, это действительно YAML (ну, первые два; в третьих, убедитесь, что у вас есть пробел после - в последовательностях); но он может не делать то, что вы думаете. В твоем игрушечном примере

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

значение, связанное с items является последовательностью; и каждая запись этой последовательности является картой с одной парой ключ / значение (для первой записи ключ list1и во втором, list2).

В вашем первом реальном примере вас могло смутить то, как получить доступ к каждому элементу. Так как вы отметили это yaml-cppВот как вы можете получить, скажем, список игрушек в оранжерее вашего первого примера:

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

(Обратите внимание [0] перед доступом к ключам "домик на дереве" и "игрушки".)

Другие вопросы по тегам