Форматирование и валидация YAML

RSS

Проверяйте YAML, точно находите ошибки отступов и синтаксиса, приводите форматирование к единому виду или конвертируйте в JSON — конфиденциально, прямо в браузере.

Работает на 100% в вашем браузере. Ничего из вставленного не загружается на сервер и не сохраняется.
Исходный YAML
Результат
Готово.

Как пользоваться форматированием YAML

  1. Вставьте YAML в поле ввода, например манифест Kubernetes, файл Docker Compose или конвейер CI.
  2. Нажмите Проверить, чтобы проверить синтаксис. Ошибки сообщаются с указанием строки и столбца, где остановился парсер.
  3. Нажмите Форматировать, чтобы заново вывести документ с единообразными отступами и кавычками.
  4. Нажмите Преобразовать в JSON, чтобы увидеть те же данные в виде JSON.
  5. Скопируйте результат обратно в свой проект.

Инструмент разбирает 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.1version: "1.10"
zip: 01234Ведущий ноль может пропасть или значение будет прочитано как восьмеричноеzip: "01234"
country: NOЛогическое значение в парсерах YAML 1.1country: "NO"
enabled: yesЛогическое значение в 1.1, строка в 1.2enabled: 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 воспринимаются как строки.

Обновлено

Скопировано в буфер обмена