Валидатор и форматировщик YAML
ФорматированиеПроверка, нормализация или сжатие YAML через js-yaml. Выравнивает отступы и кавычки, разделяет многодокументные потоки (---). Только YAML — без конвертации форматов.
Удалённые URL не запрашиваются; вставьте JSON напрямую.
На этой странице
Что такое форматтер YAML?#
Форматтер YAML берёт конфиг, который «уплыл», — табы, смешанные с пробелами, неровный шаг отступа, кавычки кое-где есть, а кое-где нет, якорь, который кто-то завёл и больше не использовал, — и нормализует его в чистую, предсказуемую форму. Он также ловит то, чем печально славится YAML: документ, который выглядит нормально и негласно значит нечто иное, потому что YAML чувствителен к пробелам и полон неявных правил о том, что значит голое слово.
Эта страница разбирает ваш YAML и перевыпускает его через js-yaml контролируемым образом. Форматировать переформатирует с выбранным шагом (2 или 4 пробела), отключает сворачивание строк так, что каждое значение сидит на своей строке, и разворачивает любые якоря и алиасы в обычное повторяемое содержимое, поэтому выход полностью самодостаточен. Сжать переопечатывает те же данные в нотации flow — {a: 1, b: [2, 3]} — ближайший к компактной форме вид, который есть у YAML, поскольку он не может просто удалить свои пробелы, как JSON или CSS. Какой режим ни выберите, документ сначала разбирается, поэтому таб там, где должен быть пробел, или двоеточие без завершающего пробела сообщаются со строкой и столбцом, а не молча дают неверную структуру данных.
Как пользоваться#
- Вставьте YAML в панель Ввод слева. Плейсхолдер показывает минимальный документ, либо нажмите Пример.
- Выберите кнопку режима на панели инструментов:
- Форматировать — переформатирует отступы, отключает сворачивание строк, разворачивает якоря/алиасы и выдаёт каждую коллекцию в блочном стиле.
- Сжать — выдаёт каждую коллекцию в flow-стиле на минимальном числе строк. Отступы теряют значение, потому что flow-коллекции самодостаточны.
- В режиме форматирования выберите Отступ: 2 или 4 пробела.
- По желанию выберите стиль Кавычки: Авто (закавычивать только тогда, когда скаляр действительно этого требует, — значение по умолчанию), Одинарные (’…’) или Двойные (”…”). Это нормализует символ кавычек на скалярах, требующих закавычивания; она никогда не навязывает кавычки обычным значениям, в которых они не нужны.
- Прочитайте результат в панели Вывод. Шапка показывает размер выхода; возьмите его через Копировать. Очистить сбрасывает обе панели.
Если разбор падает, строка состояния сообщает строку и столбец проблемы — ошибки YAML из js-yaml несут позицию, и эта страница выводит её напрямую.
Ключевые возможности#
- Форматирование и минификация из одного разбора. Оба режима проверяют документ заранее, поэтому структурная ошибка сообщается один раз с местом, независимо от нажатой кнопки.
- Разворачивание якорей. Ссылки
&anchor/*aliasразрешаются и пишутся inline (noRefs), поэтому выход никогда не зависит от имени, заведённого тремя экранами выше. Результат — самодостаточный документ, который можно отдать кому угодно. - Без сворачивания строк. Длинные значения не переносятся по лимиту столбцов (
lineWidth: -1), поэтому каждое значение занимает ровно одну строку — легче сравнивать и читать. - Опциональная нормализация кавычек. Выберите одинарные или двойные кавычки, чтобы символ кавычек был единообразен по всему документу, или оставьте «Авто», чтобы закавычивались только значения, которым это действительно нужно.
- Поддержка нескольких документов. Вход, разделённый
---, разбирается как несколько документов и перевыпускается с разделителями---— удобно для Kubernetes-манифестов и подобных мульти-документных файлов. - Защита от YAML-бомб. Ограничение глубины вложенности уберегает от патологически глубоких документов, способных развернуться во что-то опасное.
- Строго на стороне клиента, с Web Worker для входов свыше 1 МБ, поэтому страница остаётся отзывчивой.
Разбор примера#
Конфиг сервиса с переиспользуемым якорем и слегка неровным стилем:
Ввод:
service:
name: &name "api-gateway"
host: example.com
replicas: 3
id: *name
logging:
level: info
outputs: [{name: stdout}, {name: file}]
Нажмите Форматировать с отступом 2 пробела и кавычками Авто:
service:
name: api-gateway
host: example.com
replicas: 3
id: api-gateway
logging:
level: info
outputs:
- name: stdout
- name: file
Видно две вещи. И якорь &name, и алиас *name разрешены в литеральное значение api-gateway, поэтому id теперь читается как обычное значение и документ больше не зависит от якоря. А flow-список [{name: stdout}, {name: file}] переписан как блочный список — по записи на строку, гораздо удобнее для просмотра и сравнения с другой версией. Нажмите Сжать на том же входе — те же данные вернутся в flow-форме:
service: {name: api-gateway, host: example.com, replicas: 3, id: api-gateway}
logging: {level: info, outputs: [{name: stdout}, {name: file}]}
Каждая коллекция теперь inline. Число байт падает, потому что отступы и переводы строк ушли, но смысл идентичен — что и должна значить минификация для формата, чувствительного к пробелам.
FAQ#
Куда делись мои комментарии?#
Полный цикл YAML через js-yaml разбирает комментарии и отбрасывает их — в библиотеке нет сохраняющего комментарии повторного дампера. Комментарии tolerated при разборе (они никогда не вызывают ошибку), но в выход не попадают. Если комментарии несут важный контекст, храните оригинальный файл как источник истины и считайте выход этого инструмента канонической машинной формой.
В чём разница между «Форматировать» и «Сжать» для YAML?#
Форматирование переписывает документ в чистом блочном стиле: вложенные отображения и последовательности с выбранным шагом отступа, по одному значению на строку, без сворачивания. Минификация переписывает те же данные в flow-стиле: коллекции {key: value} и [a, b] на одной строке. Оба сначала разбирают одинаково; различие лишь в том, как данные сериализуются обратно.
Чем это отличается от конвертера YAML/JSON?#
Этот инструмент — YAML на входе, YAML на выходе: он нормализует или уплотняет YAML-документ и возвращает YAML. Конвертер YAML/JSON на этом сайте переводит между двумя форматами. Используйте эту страницу, когда хотите тот же формат, но лучше сформированный; конвертер — когда действительно нужен JSON.
Мой YAML куда-то отправляется?#
Нет. js-yaml встроен в страницу и работает в вашем браузере. Для входов свыше 1 МБ разбор происходит внутри Web Worker, но всё равно локально — ничего не покидает ваше устройство.