Info
Content

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
Back to top