yaml.md

Личный сайт Go-разработчика из Казани

YAML как язык сериализации данных предназначен прежде всего для использования людьми.

Это строгое надмножество JSON с добавлением синтаксически значимых переносов строк и отступов как в Python. Тем не менее в отличие от Python, YAML запрещает использование табов для отступов.

1--- # начало документа 2 3# Комментарий в YAML выглядит как-то так. 4 5###################### 6# Скалярные величины # 7###################### 8 9# Наш корневой объект (который продолжается до конца документа) будет соответствовать 10# типу map, который в свою очередь соответствует словарю, хешу или объекту в других языках. 11key: value 12another_key: Другое значение ключа. 13a_number_value: 100 14scientific_notation: 1e+12 15# Число 1 будет интерпретировано как число, а не как логический тип. Если необходимо чтобы 16# значение было интерпретировано как логическое, необходимо использовать true 17boolean: true 18null_value: null 19key with spaces: value 20 21# Обратите внимание что строки используются без кавычек, но могут и с кавычками. 22however: 'Строка заключенная в кавычки.' 23'Ключ заключенный в кавычки.': "Полезно если нужно использовать ':' в вашем ключе." 24single quotes: 'Содержит ''одну'' экранированную строку' 25double quotes: "Содержит несколько: \", \0, \t, \u263A, \x0d\x0a == \r\n, экранированных строк." 26 27# Многострочные строковые значения могут быть записаны как 'строковый блок' (используя |), 28# или как 'сложенный блок' (используя '>'). 29literal_block: | 30 Значение всего текста в этом блоке будет присвоено ключу 'literal_block', 31 с сохранением переноса строк. 32 33 Объявление продолжается до удаления отступа и выравнивания с ведущим отступом. 34 35 Любые строки с большим отступом сохраняют остатки своего отступа - 36 эта строка будет содержать дополнительно 4 пробела. 37folded_style: > 38 Весь блок этого текста будет значением 'folded_style', но в данном случае 39 все символы новой строки будут заменены пробелами. 40 41 Пустые строки будут преобразованы в перенос строки. 42 43 Строки с дополнительными отступами сохраняют их переносы строк - 44 этот текст появится через 2 строки. 45 46################## 47# Типы коллекций # 48################## 49 50# Вложения используют отступы. Отступ в 2 пробела предпочтителен (но не обязателен). 51a_nested_map: 52 key: value 53 another_key: Another Value 54 another_nested_map: 55 hello: hello 56 57# В словарях (maps) используются не только строковые значения ключей. 580.25: a float key 59 60# Ключи также могут быть сложными, например многострочными. 61# Мы используем ? с последующим пробелом, чтобы обозначить начало сложного ключа. 62? | 63 Этот ключ 64 который содержит несколько строк 65: и это его значение 66 67# YAML также разрешает соответствия между последовательностями со сложными ключами 68# Некоторые парсеры могут выдать предупреждения или ошибку 69# Пример 70? - Manchester United 71 - Real Madrid 72: [2001-01-01, 2002-02-02] 73 74# Последовательности (эквивалент списка или массива) выглядят как-то так 75# (обратите внимание что знак '-' считается отступом): 76a_sequence: 77 - Item 1 78 - Item 2 79 - 0.5 # последовательности могут содержать различные типы. 80 - Item 4 81 - key: value 82 another_key: another_value 83 - 84 - Это последовательность 85 - внутри другой последовательности 86 - - - Объявления вложенных последовательностей 87 - могут быть сжаты 88 89# Поскольку YAML это надмножество JSON, вы можете использовать JSON-подобный 90# синтаксис для словарей и последовательностей: 91json_map: {"key": "value"} 92json_seq: [3, 2, 1, "takeoff"] 93в данном случае кавычки не обязательны: {key: [3, 2, 1, takeoff]} 94 95########################## 96# Дополнительные функции # 97########################## 98 99# В YAML есть удобная система так называемых 'якорей' (anchors), которые позволяют легко 100# дублировать содержимое внутри документа. Оба ключа в примере будут иметь одинаковые значения: 101anchored_content: &anchor_name Эта строка будет являться значением обоих ключей. 102other_anchor: *anchor_name 103 104# Якоря могут использоваться для дублирования/наследования свойств 105base: &base 106 name: Каждый будет иметь одинаковое имя 107 108# Регулярное выражение << называется ключом объединения независимо от типа языка. 109# Он используется, чтобы показать что все ключи одного или более словарей должны быть 110# добавлены в текущий словарь. 111 112foo: &foo 113 <<: *base 114 age: 10 115 116bar: &bar 117 <<: *base 118 age: 20 119 120# foo и bar могли бы иметь имена: Каждый из них имеет аналогичное имя 121 122# В YAML есть теги (tags), которые используются для явного объявления типов. 123explicit_string: !!str 0.5 124# В некоторых парсерах реализованы теги для конкретного языка, пример для Python 125# пример сложного числового типа. 126python_complex_number: !!python/complex 1+2j 127 128# Мы можем использовать сложные ключи с включенными в них тегами из определенного языка 129? !!python/tuple [5, 7] 130: Fifty Seven 131# Могло бы быть {(5, 7): 'Fifty Seven'} в Python 132 133####################### 134# Дополнительные типы # 135####################### 136 137# Строки и числа не единственные величины которые может понять YAML. 138# YAML также поддерживает даты и время в формате ISO. 139datetime: 2001-12-15T02:59:43.1Z 140datetime_with_spaces: 2001-12-14 21:59:43.10 -5 141date: 2002-12-14 142 143# Тег !!binary показывает что эта строка является base64-закодированным 144# представлением двоичного объекта. 145gif_file: !!binary | 146 R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5 147 OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+ 148 +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC 149 AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs= 150 151# YAML может использовать объекты типа ассоциативных массивов (set), как представлено ниже: 152set: 153 ? item1 154 ? item2 155 ? item3 156or: {item1, item2, item3} 157 158# Сеты (set) являются простыми эквивалентами словарей со значениями 159# типа null; запись выше эквивалентна следующей: 160set2: 161 item1: null 162 item2: null 163 item3: null 164 165... # конец документа

Больше информации