Как пользоваться форматированием YAML
- Вставьте YAML в поле ввода, например манифест Kubernetes, файл Docker Compose или конвейер CI.
- Нажмите Проверить, чтобы проверить синтаксис. Ошибки сообщаются с указанием строки и столбца, где остановился парсер.
- Нажмите Форматировать, чтобы заново вывести документ с единообразными отступами и кавычками.
- Нажмите Преобразовать в JSON, чтобы увидеть те же данные в виде JSON.
- Скопируйте результат обратно в свой проект.
Инструмент разбирает YAML 1.2 с помощью библиотеки с открытым кодом js-yaml, полностью в вашем браузере. Ваши файлы никуда не загружаются и нигде не хранятся, что важно, если в них есть имена хостов, учётные данные или другие секреты.
Что такое YAML?
YAML («YAML Ain't Markup Language») — удобный для человека формат сериализации данных. Вместо квадратных и фигурных скобок структура обозначается отступами, элементы списка — дефисом (-), а отображения записываются парами ключ: значение. Он также поддерживает комментарии с #, многострочные строки, а также якоря и алиасы для повторного использования значений.
Начиная с YAML 1.2, формат задуман как надмножество JSON, поэтому почти любой корректный документ JSON является и корректным YAML. Это упрощает переход между ними: YAML приятно писать вручную, а JSON — то, чем обмениваются большинство API и программ.
Поскольку пробельные символы несут смысл, один лишний пробел может изменить структуру файла YAML без сообщения об ошибке. Проверка и повторное форматирование показывают, как парсер на самом деле читает ваш документ, — часто это самый быстрый способ найти скрытую ошибку.
Типичные ошибки YAML и как их исправить
Табуляция в отступах. YAML запрещает символы табуляции в отступах. Замените их пробелами; большинство редакторов умеют делать это автоматически.
Непоследовательные отступы. Элементы одного уровня должны быть выровнены точно. В этом примере image сдвинут на один пробел дальше, чем нужно:
containers:
- name: web
image: nginx:1.27
Выровняйте его по name:
containers:
- name: web
image: nginx:1.27
Нет пробела после двоеточия. port:8080 читается как одна простая строка, а не как ключ со значением. Напишите port: 8080.
Специальные символы в строках без кавычек. Значение, которое начинается с *, &, !, @, { или [ либо содержит : или #, нужно взять в кавычки:
message: "Error: disk full"
pattern: "*.log"
Повторяющиеся ключи. В отображении один и тот же ключ не может встречаться дважды. Некоторые парсеры молча оставляют последнее значение; проверка выдаёт предупреждение, чтобы вы это заметили.
Неявная типизация: классический сюрприз YAML
YAML угадывает типы значений без кавычек. По базовой схеме YAML 1.2 true и false — логические значения, null и ~ — null, а то, что выглядит как числа, — числа. Старые парсеры YAML 1.1 заходили дальше и считали логическими значениями yes, no, on и off, из-за чего, как известно, код страны NO для Норвегии превращался в false. Разные инструменты до сих пор расходятся в этом, поэтому берите в кавычки всё, что должно остаться строкой:
| Значение без кавычек | Риск | Безопасная запись |
|---|---|---|
version: 1.10 | Превращается в число 1.1 | version: "1.10" |
zip: 01234 | Ведущий ноль может пропасть или значение будет прочитано как восьмеричное | zip: "01234" |
country: NO | Логическое значение в парсерах YAML 1.1 | country: "NO" |
enabled: yes | Логическое значение в 1.1, строка в 1.2 | enabled: true |
Советы и лучшие практики
- Используйте два пробела на уровень: это самый распространённый стиль в файлах Kubernetes, Ansible и GitHub Actions.
- Используйте
|для многострочного текста, где важны переносы строк (скрипты, сертификаты), и>, где строки должны склеиваться в один абзац. - Преобразование в JSON — надёжный способ проверить структуру: если значение попало не в тот объект, это сразу видно по выводу JSON. Для преобразований туда и обратно используйте конвертер JSON ↔ YAML.
- Нужно потом привести в порядок JSON? Форматирование и валидация JSON умеет сортировать ключи и минифицировать результат.
Часто задаваемые вопросы
Является ли JSON корректным YAML?
На практике да. YAML 1.2 согласован так, чтобы документы JSON были корректным YAML, поэтому JSON можно вставить в этот инструмент, и он его разберёт.
Почему YAML не допускает табуляцию?
Табуляция отображается с разной шириной в разных редакторах, поэтому отступы, которые выглядят выровненными, могут таковыми не быть. Спецификация запрещает табуляцию в отступах, чтобы структура оставалась однозначной.
Почему форматирование удалило мои комментарии?
Форматирование разбирает YAML в данные и выводит их заново. Комментарии не являются данными, поэтому такое преобразование они не переживают. Якоря и алиасы раскрываются при разборе, поэтому могут вернуться развёрнутыми или со сгенерированными именами.
Какую версию YAML поддерживает этот инструмент?
Инструмент использует библиотеку js-yaml, которая следует YAML 1.2. Файлы, написанные для парсеров YAML 1.1, обычно работают, но значения вроде yes и no воспринимаются как строки.
Обновлено