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

Перевод между JSON и YAML с сохранением порядка ключей

Перевод JSON в YAML и обратно, порядок ключей сохраняетсяАвтоопределение
Ввод JSON
Вывод YAML

Описание инструмента

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

Этот конвертер превращает JSON в YAML и YAML обратно в JSON, чтобы одна и та же конфигурация переезжала между телом запроса к API и манифестом Kubernetes, файлом Docker Compose, рабочим процессом GitHub Actions или документом OpenAPI без ручного перенабора.

Преобразование идёт по мере ввода, порядок ключей сохраняется ровно таким, каким вы его написали, а отступ можно задать в 2 или 4 пробела. Синтаксические ошибки сообщают точную строку и колонку.

Как перевести JSON to YAML

  1. Вставьте JSON в панель ввода. Результат в YAML появится сразу, никакую кнопку нажимать не нужно.
  2. Кнопкой направления переключитесь на YAML to JSON — например, чтобы скормить манифест скрипту, который читает только JSON.
  3. Выберите отступ в 2 или 4 пробела под стиль вашего репозитория. Файлы Kubernetes и GitHub Actions обычно используют 2.
  4. Если ввод некорректен, посмотрите указанные строку и колонку, поправьте это место — вывод обновится сам.

Когда это пригодится

  • Превратить ресурс в JSON, выгруженный через kubectl, в читаемый манифест YAML, который не стыдно закоммитить.
  • Перевести блок сервиса Docker Compose при отладке сгенерированной конфигурации.
  • Перегнать спецификацию OpenAPI между формами JSON и YAML, потому что инструменты по обе стороны предпочитают разное.
  • Переписать фрагмент рабочего процесса GitHub Actions, полученный в JSON, в тот YAML, которого ждёт раннер.

Правила YAML, о которые спотыкаются преобразования

YAML 1.2 почти надмножество JSON, поэтому корректный JSON обычно является корректным YAML. Сложности возникают в обратную сторону, где YAML угадывает типы, чего JSON не делает никогда.

  • Проблема Норвегии: NO, no, yes, on и off парсеры YAML 1.1 читают как булевы значения, и код страны NO превращается в false. Такие значения берите в кавычки.
  • Ведущие нули: значение вроде 010 может быть прочитано как восьмеричное число вместо строки. Заключайте в кавычки идентификаторы, почтовые индексы и артикулы.
  • Номера версий: незакавыченное 1.10 становится числом 1.1, и завершающий ноль исчезает.
  • Отступы делаются только пробелами, никогда табуляцией, а после каждого двоеточия, вводящего значение, нужен пробел.

Частые вопросы: JSON в YAML

Меняет ли конвертер порядок моих ключей?
Нет. Ключи выходят в том порядке, в котором вы их подали, и это удерживает различия в системе контроля версий компактными.
Что происходит с комментариями?
В JSON нет синтаксиса комментариев, поэтому при переводе JSON в YAML их неоткуда взять, а при обратном переводе имевшиеся комментарии отбрасываются. Если комментарии важны, сохраните оригинал.
Будут ли в выводе якоря и алиасы?
Нет. Повторяющиеся структуры выписываются целиком, чтобы результат прочитал любой парсер, даже без поддержки алиасов.
Загружается ли моя конфигурация куда-либо?
Нет. Разбор и преобразование выполняются в вашем браузере библиотекой js-yaml, поэтому вставленное вами не покидает машину и не сохраняется на wetool.site.
Почему значение YAML меняет тип после преобразования?
YAML угадывает типы незакавыченных скаляров. Возьмите значение в кавычки в исходном YAML — и оно преобразуется в строку JSON.

JSON в сравнении с YAML

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

Чек-лист кавычек перед коммитом

Почти все сломанные из-за преобразования развёртывания начинаются со значения, потерявшего свой тип. Пробегитесь по выводу YAML и проверьте эти случаи.

  • Коды стран и языков, особенно NO, и любое двухбуквенное значение, читающееся как слово.
  • Числа, которые на самом деле идентификаторы: номера счетов, порты с дополняющими нулями, всё с ведущим нулём.
  • Версии и теги образов вроде 1.10 или 3.20 — они теряют завершающий ноль, если их сочтут числами с плавающей точкой.