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 пробелы имеют значение. Каждый отступ из двух пробелов является новым уровнем (область видимости):
xxxxxxxxxx
level1
level2
Level3
Также можно указывать область видимости более явно с помощью скобок:
xxxxxxxxxx
# квадратными
name hr avg
Mark McGwire 65 0.278
Sammy Sosa 63 0.288
# фигурными
Mark McGwire hr65 avg0.278
Sammy Sosa
hr63
avg 0.288
Каждый элемент последовательности обозначается через тире с пробелом:
xxxxxxxxxx
Mark McGwire
Sammy Sosa
Ken Griffey
Последовательность является упорядоченной
Для обозначения сопоставления используется двоеточие с пробелом (ключ: значение):
xxxxxxxxxx
itema"one"
itemb"two"
Комментарии обозначаются через решетку:
xxxxxxxxxx
hr 65 # Home runs
avg 0.278 # Batting average
rbi 147 # Runs Batted In
Три дефиса обозначают начало документа:
xxxxxxxxxx
# Ranking of 1998 home runs
---
Mark McGwire
Sammy Sosa
Ken Griffey
# Team ranking
---
Chicago Cubs
St Louis Cardinals
А три точки обозначают конец документа (и начало нового):
xxxxxxxxxx
---
time 20 0320
player Sammy Sosa
action strike (miss)
...
---
time 20 0347
player Sammy Sosa
action grand slam
...
Можно переиспользовать объекты. Делать якоря (алиасы) на объекты и вызывать их в другом месте документа с помощью амперсанда и звездочки:
xxxxxxxxxx
---
hr
Mark McGwire
# Following node labeled SS
&SS Sammy Sosa
rbi
# Subsequent occurrence *SS
Ken Griffey
Насколько я понял, *SS подменяет собой все что после &SS во всей области видимости
Альтернативный пример:
xxxxxxxxxx
inheritance
_basic&basic
cpu2
ram2
disk10
os rhel6
vm-profiles
small
<<*basic
cpu1
large
<<*basic
cpu4
& - определяет имя объекта
* - позволяет обратиться к объекту по имени
<<: *NAME - заменят собой содержимое объекта NAME
В качестве ключа можно использовать и сложные структуры. Это можно делать с помощью знака вопроса с пробелом:
xxxxxxxxxx
? - Detroit Tigers
Chicago cubs
:
2001-07-23
# список можно определить и квадратными скобками
? New York Yankees
Atlanta Braves
: 2001-07-02 2001-08-12
2001-08-14
То есть ключом выступает определенный список.
В примере ниже описан список из трех объектов состоящих из двух пар key: value:
xxxxxxxxxx
---
# Products purchased
item Super Hoop
quantity1
item Basketball
quantity4
item Big Shoes
quantity1
Многострочный текст можно записать так:
xxxxxxxxxx
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