← Все инструменты

Конвертер JSON в YAML

Мгновенно конвертируйте JSON в YAML и YAML в JSON прямо в браузере. Только локально и приватно, с пояснениями про комментарии, типы, отступы и якоря.

Конвертация JSON в YAML и YAML в JSON прямо в браузере

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

Абстрактные светящиеся скобки трансформируются в чистые слои конфигурации с отступами на тёмно-индиговом фоне
Структура JSON разворачивается в YAML на основе отступов.

Что такое 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 требует пробелов для отступов и отвергает табуляцию. Если вставка не разбирается, замените символы табуляции пробелами и сохраняйте отступы последовательными.