YAML 1.2
https://www.unserialize.me/ - сервис для преобразований
https://yaml.org/spec/1.2/spec.html - документация
JSON является подмножеством YAML (то есть YAML-парсер понимает JSON и внутри YAML кода можно использовать JSON)
В JSON ключи должны быть уникальными (но могут и не быть), а в YAML они не могут быть не уникальными (обязательно должны быть уникальными)
Лучше всегда использовать пробелы вместо табов.
Можно тестировать синтаксис через приложение yamllint
В YAML пробелы имеют значение. Каждый отступ из двух пробелов является новым уровнем (область видимости):
level1:
level2:
Level3:
Также можно указывать область видимости более явно с помощью скобок:
# квадратными
- [name , hr, avg ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa , 63, 0.288]
# фигурными
Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
hr: 63,
avg: 0.288
}
Каждый элемент последовательности обозначается через тире с пробелом:
- Mark McGwire
- Sammy Sosa
- Ken Griffey
Последовательность является упорядоченной
Для обозначения сопоставления используется двоеточие с пробелом (ключ: значение):
itema: "one"
itemb: "two"
Комментарии обозначаются через решетку:
hr: 65 # Home runs
avg: 0.278 # Batting average
rbi: 147 # Runs Batted In
Три дефиса обозначают начало документа:
# Ranking of 1998 home runs
---
- Mark McGwire
- Sammy Sosa
- Ken Griffey
# Team ranking
---
- Chicago Cubs
- St Louis Cardinals
А три точки обозначают конец документа (и начало нового):
---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...
Можно переиспользовать объекты. Делать якоря (алиасы) на объекты и вызывать их в другом месте документа с помощью амперсанда и звездочки:
---
hr:
- Mark McGwire
# Following node labeled SS
- &SS Sammy Sosa
rbi:
- *SS # Subsequent occurrence
- Ken Griffey
Насколько я понял, *SS подменяет собой все что после &SS во всей области видимости
Альтернативный пример:
inheritance:
_basic: &basic
cpu: 2
ram: 2
disk: 10
os: rhel6
vm-profiles:
small:
<<: *basic
cpu: 1
large:
<<: *basic
cpu: 4
& - определяет имя объекта
* - позволяет обратиться к объекту по имени
<<: *NAME - заменят собой содержимое объекта NAME
В качестве ключа можно использовать и сложные структуры. Это можно делать с помощью знака вопроса с пробелом:
? - Detroit Tigers
- Chicago cubs
:
- 2001-07-23
# список можно определить и квадратными скобками
? [ New York Yankees,
Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
2001-08-14 ]
То есть ключом выступает определенный список.
В примере ниже описан список из трех объектов состоящих из двух пар key: value:
---
# Products purchased
- item : Super Hoop
quantity: 1
- item : Basketball
quantity: 4
- item : Big Shoes
quantity: 1
Многострочный текст можно записать так:
multiliners:
ugly_multiline: "ugly\nugly\nugly\nugly\n" # по-дурацки
multiline_with_line_ending: | # палка означает что переносы строк сохраняются
multiline text
with ending
accomplishment: > # стрелка означает что переносы складываются в пробелы
Mark set a major league
home run record in 1998.
multiline_without_line_ending: |-
multiline text
without ending
В случае со стрелкой переносы складываются в пробел, но только один перенос подряд преобразуется, все последующие переносы (идущие подряд) интерпретируются как переносы.
Стиль с двойными кавычками обеспечивает escape-последовательности. Стиль с одинарными кавычками полезен, когда экранирование не требуется.
No Comments