JSON ⟷ YAML

Не вставляйте боевые .env с паролями и токенами: файл уходит на сервер для разбора.

Чем YAML отличается от JSON

YAML умеет то, чего нет в JSON: комментарии через #, ссылки-якоря (&имя*имя) на повторяющиеся блоки конфигурации и многострочные текстовые литералы (| — с сохранением переносов строк, > — со сворачиванием их в пробелы). JSON ничего из этого не поддерживает, поэтому при переводе YAML → JSON комментарии и якоря теряются безвозвратно: разворачивать ссылку в дублирующийся текст конвертер не станет молча, а объекта для комментария в JSON попросту нет.

Почему отступ — два пробела

В YAML отступ — не оформление, а синтаксис: именно им задаётся вложенность объектов и списков, и табуляции YAML не допускает вовсе (спецификация запрещает их в отступах явно). Два пробела — соглашение, вокруг которого сложилась экосистема: Kubernetes, Ansible, GitHub Actions, docker-compose. Конвертер держится того же шага, чтобы результат без правок вставлялся в такие файлы.

Есть и обратная сторона: блочный стиль сохраняется только до четырёх уровней вложенности — глубже YAML сворачивает вложенные объекты в компактную потоковую запись вида { a: { b: 1 } }. Это валидный YAML, и он вставится без ошибок, но выглядит непривычно, если вы ждали блочный формат на всех уровнях.

Что происходит с многострочными строками при обратном переводе

Литературный блок YAML (| или >) на выходе в JSON становится обычной строкой с символами \n внутри: JSON не различает, каким блочным стилем строка была записана в источнике, — только итоговое содержимое. При переводе JSON → YAML такая строка с переносами автоматически снова превращается в блочный литерал |, а не остаётся одной длинной строкой в кавычках.

Частые вопросы

Чем YAML отличается от JSON?

YAML умеет то, чего нет в JSON: комментарии через #, ссылки-якоря (&имя … *имя) на повторяющиеся блоки и многострочные текстовые литералы (| и >). При переводе YAML → JSON комментарии и якоря теряются безвозвратно — JSON для них просто не предусматривает места.

Почему отступ именно два пробела?

Отступ в YAML задаёт вложенность, поэтому его размер важен для читаемости и для совместимости с инструментами экосистемы (Kubernetes, Ansible, GitHub Actions), которые сложились вокруг двух пробелов. Табуляции YAML не допускает вовсе.

Что будет с многострочной строкой при обратном переводе в JSON?

Многострочный литературный блок (| — с сохранением переносов, > — со сворачиванием их в пробелы) на выходе в JSON становится обычной строкой с символами внутри: JSON не различает, каким блочным стилем строка была записана в источнике, только итоговое содержимое.

Другие конвертеры

JSON ⟷ PHP-массив, универсальный конвертер конфигов (JSON, YAML, .env, PHP-массив, XML, CSV), CSV ⟷ JSON, JSON ⟷ XML, а также остальные инструменты.

Нужна разработка или консультация?

Опишите задачу — отвечу и предложу формат работы.

Обсудить задачу