Это действительный 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]
перед доступом к ключам "домик на дереве" и "игрушки".)