Конвертация JSON в YAML и YAML в JSON прямо в браузере
JSON и YAML описывают один и тот же вид данных — вложенные словари, списки, строки, числа и булевы значения — но выглядят очень по-разному и используются в разных местах. Если вы проводите какое-то время рядом с API, файлами контейнеров или CI-пайплайнами, рано или поздно придётся переводить одно в другое. Эта страница выполняет конвертацию в обоих направлениях прямо в браузере, так что вставленные данные никогда не покидают вашу машину.

Что такое JSON и где он используется
JSON (JavaScript Object Notation) — строгий формат из скобок и фигурных скобок, созданный в первую очередь для машин. Каждый объект заключается в {}, каждый массив — в [], ключи и строковые значения берутся в двойные кавычки, а элементы разделяются запятыми. Это формат по умолчанию для REST и GraphQL API, тело большинства вебхуков, структура NoSQL-документов и то, что возвращает ваш fetch-запрос. Почти каждый язык программирования разбирает его «из коробки» — именно поэтому JSON завоевал API-слой: JSON.parse в JavaScript, модуль json в стандартной библиотеке Python и аналоги везде. Компромисс — JSON многословен для ручного написания и не допускает комментариев, поэтому плохо подходит для файлов, которые человек редактирует весь день.
Что такое YAML и где он используется
YAML (YAML Ain't Markup Language) создавался с противоположным приоритетом: сначала человек. Он убирает скобки и кавычки, использует отступы для выражения вложенности и позволяет писать комментарии через #. Эта читаемость сделала его lingua franca конфигурации. Docker Compose-файлы, манифесты Kubernetes, рабочие процессы GitHub Actions и GitLab CI, плейбуки Ansible и бесчисленные файлы настроек приложений — всё это YAML. Типичный YAML-документ заметно короче эквивалентного JSON и гораздо удобнее для просмотра diff в pull request. Цена этой элегантности — хрупкость, именно здесь конвертация становится интересной.
Ключевые различия, важные для конвертации
Три различия обусловливают почти каждое решение при конвертации. Во-первых, в YAML пробелы значимы, в JSON — нет. YAML использует пробелы — никогда не табуляцию — для обозначения структуры, поэтому один смещённый пробел способен незаметно изменить смысл документа. JSON не заботится об отступах вообще. Во-вторых, YAML поддерживает комментарии, JSON — нет. Любой комментарий # в YAML просто исчезает при производстве JSON — ему негде быть. В-третьих, YAML имеет более богатую неявную типизацию. Он охотно читает даты, временны́е метки и null в нескольких написаниях и угадывает типы по значениям без кавычек. JSON имеет небольшой явный набор типов и никакой двусмысленности. Заметьте также, что JSON технически является подмножеством YAML 1.2 — поэтому правильный JSON обычно разбирается как YAML без проблем, но обратное не гарантировано.

Подводные камни при конвертации
Конвертация туда и обратно не всегда обратима, и стоит знать, где она ломается:
- Проблема Норвегии. По правилам YAML 1.1 неэкранированное
NOразбирается как булевоfalse, аyes,onиoffтоже становятся булевыми. Код страны или метка переключателя может превратиться вtrue/falseнезаметно. Заключайте в кавычки значения, которые должны быть строками. - Принуждение числа. Версия вида
3.10может потерять замыкающий ноль и стать3.1, а1.0превращается в число, даже если вы хотели текст. Заключайте строки версий и идентификаторы в кавычки. - Якоря и псевдонимы исчезают. Ссылки
&anchorи*aliasиз YAML не имеют эквивалента в JSON. Хороший конвертер разворачивает их в полное значение — данные верны, но дедупликация утрачена; конвертация JSON в YAML не восстановит исходные якоря. - Комментарии и блочные скаляры. Комментарии удаляются при конвертации в JSON. Многострочные блочные скаляры (
|и>) сворачиваются в обычные JSON-строки с символами\n— визуальное форматирование теряется. - Отступы при конвертации обратно в YAML. JSON не кодирует отступы, поэтому конвертер выбирает последовательный стиль. Проверьте его перед вставкой в инструмент, чувствительный к отступам.
Почему важно работать только локально
Конфигурационные файлы и полезные нагрузки API — именно тот тип данных, который не должен загружаться на случайный сервер: в них часто встречаются имена хостов, токены, имена внутренних сервисов или данные клиентов. Этот конвертер выполняет разбор и вывод в браузере с использованием JavaScript. Ничего не отправляется на бэкенд, ничего не логируется, а инструмент работает офлайн после загрузки страницы. Вставляйте секреты Kubernetes или CI-рабочие процессы с уверенностью, что они остаются на вашей машине.
Нужны смежные инструменты? Просмотрите полный набор конвертеров данных, приведите в порядок беспорядочный ввод с помощью форматировщика JSON и возвращайтесь сюда, когда нужно перейти из мира API в мир конфигурации.
Часто задаваемые вопросы
Мои данные куда-то загружаются?
Нет. Конвертация происходит полностью в браузере с использованием локального JavaScript. Ваш JSON или YAML никогда не отправляется на сервер — секреты и конфигурационные файлы остаются приватными.
Почему моё значение true или false в YAML неожиданно изменилось?
YAML 1.1 трактует неэкранированные слова yes, no, on и off как булевы значения — это и есть проблема Норвегии. Заключите любое значение, которое должно быть строкой, в кавычки, чтобы оно пережило конвертацию как текст.
Что происходит с комментариями при конвертации YAML в JSON?
В JSON нет синтаксиса комментариев, поэтому все комментарии-хэши удаляются при конвертации. Если нужно сохранить заметки, держите авторитетную копию в YAML.
Сохраняются ли якоря и псевдонимы YAML?
Они разворачиваются в полные значения, поскольку JSON не имеет механизма ссылок. Данные остаются корректными, но дедупликация невосстановима при обратной конвертации в YAML.
Можно ли конвертировать JSON в YAML, а также YAML в JSON?
Да, инструмент работает в обоих направлениях. Вставьте JSON, чтобы получить YAML, или вставьте YAML, чтобы получить JSON — конвертер определяет и выдаёт другой формат.
Почему YAML ломается при использовании табуляции?
YAML требует пробелов для отступов и отвергает табуляцию. Если вставка не разбирается, замените символы табуляции пробелами и сохраняйте отступы последовательными.
