§

Вставьте JSON или YAML, который хотите преобразовать.

Режим
Отступ
Параметры
§

Результат

yaml

Переход между JSON и YAML — ежедневная задача российских платформенных команд. Кластеры Kubernetes в Yandex Cloud Managed Kubernetes и VK Cloud описываются YAML-манифестами, но kubectl и Helm внутри обрабатывают их как JSON. Сбербанк на платформе Platform V K8s, контейнерная платформа Tinkoff Bank, Mail.ru Group и MTS Web Services постоянно гоняют конфиги между форматами при ревью. GitOps-конвейеры Argo CD в финтехе, OpenAPI-описания в банковских API, шаблоны CloudFormation и dbt profiles.yml крутятся в обоих представлениях. Postgres Pro документирует интеграцию с Kubernetes в YAML, сертификации Astra Linux для облака требуют JSON-схемы, а национальная программа «Цифровая экономика» подталкивает к стандартизации манифестов.

Что такое преобразование JSON ↔ YAML?

JSON (JavaScript Object Notation, RFC 8259) — строгий текстовый формат с фигурными скобками для структурированных данных; YAML (YAML Ain't Markup Language, версия 1.2) — надмножество JSON, использующее отступы, переводы строк и человекочитаемый синтаксис для той же модели значений. Преобразование между ними позволяет переключать одну и ту же конфигурацию между удобной для машин формой (JSON для API, проверки схемы, программных преобразований) и удобной для человека (YAML для код-ревью, манифестов Kubernetes, workflow-файлов GitHub Actions) без переписывания ни одного ключа.

Как работает преобразование JSON ↔ YAML?

Каждое преобразование выполняется локально в вашем браузере с использованием встроенной библиотеки js-yaml (MIT, версия 4.1.0). Основные шаги:

  1. Переключатель режима (Авто-определение / JSON → YAML / YAML → JSON) выбирает, какой конвейер запустится. В режиме Авто-определение первый непробельный символ ввода определяет направление — { или [ означает JSON; всё остальное означает YAML.
  2. JSON → YAML: JSON.parse проверяет ввод и формирует JavaScript-значение; jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false }) выводит форму YAML 1.2. При включённом Многодокументном режиме входной массив выгружается по одному элементу на документ и склеивается разделителями ---.
  3. YAML → JSON: jsyaml.loadAll разбирает каждый документ во входе (автоматически обрабатывая разделители ---) в массив; однодокументный ввод разворачивается, чтобы JSON-вывод был самим документом, а не массивом из одного элемента.
  4. Отступ (2 или 4 пробела) и Форматирование настраиваются. С выключенным Форматированием выводится минифицированный JSON через JSON.stringify(value) без пробелов.
  5. Вывод записывается в текстовое поле только для чтения. При ошибках разбора YAML сообщение об ошибке содержит 1-индексированные строку и колонку, сообщаемые в e.mark библиотекой js-yaml, так что вы можете сразу перейти к месту ошибки.

Зачем преобразовывать JSON и YAML этим инструментом?

  • Конфиденциальность: каждый этап разбора, преобразования и вывода происходит в вашем браузере. Данные — включая секреты Kubernetes, подписанные JWT и собственные конфиги — никогда не попадают на наши серверы.
  • Многодокументный YAML: jsyaml.loadAll распознаёт разделители --- и возвращает массив документов, который конвертер разворачивает в одиночном случае или сохраняет как JSON-массив для многодокументных случаев.
  • Якоря и алиасы разрешены: механизм &anchor / *alias в YAML обрабатывается схемой по умолчанию js-yaml. Значение, определённое один раз и упомянутое дважды, круговым обменом превращается в JSON-объект, где обе ссылки имеют равные значения.
  • Без CDN, без телеметрии: библиотека js-yaml.min.js поставляется с того же источника, что и страница, поэтому инструмент работает офлайн, за корпоративными прокси и в изолированных средах.

Каковы распространённые применения преобразования JSON ↔ YAML?

Переход между JSON и YAML встречается в DevOps, платформенной инженерии и инструментах для API:

  • Манифесты Kubernetes: преобразование YAML Deployment, ConfigMap или HelmRelease в JSON, чтобы внутренний валидатор политик (Joi, Ajv, OPA Rego) мог проверить его программно, а затем обратно в YAML для применения в кластере.
  • CI/CD-конвейеры: круговой обмен workflow.yml GitHub Actions через JSON, чтобы генератор кода переписал матрицу или зависимости задач, после чего выпускается аккуратный YAML для PR.
  • OpenAPI-спецификации: вставка JSON openapi.json из автогенерируемой документации бэкенда и преобразование в openapi.yaml для редактируемого человеком справочника в репозитории.

Как выглядит пример кругового обмена JSON ↔ YAML?

Если вставить {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} и нажать ПРЕОБРАЗОВАТЬ в режиме JSON → YAML, получится восемь строк YAML с отступами, причём apiVersion: apps/v1 на первой строке. Подача этого YAML обратно в режиме YAML → JSON с включённым Форматированием возвращает исходный объект байт-в-байт после стабильного JSON.stringify(value, null, 2), причём порядок ключей сохраняется, так как схема по умолчанию js-yaml соблюдает порядок вставки в обоих направлениях.

Работает ли этот конвертер JSON ↔ YAML полностью в моём браузере?

Да. Каждый этап разбора, преобразования и вывода выполняется локально как JavaScript внутри вкладки браузера. Встроенная библиотека js-yaml поставляется с того же источника, что и страница, — без CDN, без fetch, без XMLHttpRequest, без navigator.sendBeacon на входе. Инструмент также работает офлайн после загрузки страницы, поскольку это статический бандл HTML/CSS/JS с библиотекой производителя рядом. Секреты Kubernetes, полезные нагрузки JWT, подписанные YAML CloudFormation и собственные конфиги остаются на вашем устройстве.

Как конвертер обрабатывает многодокументный YAML?

YAML поддерживает несколько документов в одном потоке, разделённых строками, содержащими только ---. На YAML → JSON конвертер вызывает jsyaml.loadAll, который возвращает каждый документ как JavaScript-значение. Если найден ровно один документ, JSON-вывод — это сам документ; если найдено два или более, JSON-вывод — массив. На JSON → YAML, когда вход — JSON-массив И включён переключатель Многодокументный, каждый элемент массива выводится как отдельный документ с разделителями --- между ними — удобно для генерации пакета, готового для kubectl apply, из JSON-массива ресурсов.

Поддерживаются ли якоря и алиасы YAML?

Да — определения &anchor и ссылки *alias разрешаются схемой по умолчанию js-yaml на этапе загрузки. Ввод YAML вида defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d разбирается в JSON-объект, где job_a и job_b оба содержат retries: 3, timeout: 30. Ключ слияния << (расширение YAML 1.1, которое js-yaml всё ещё поддерживает) также поддерживается в схеме по умолчанию.

Сохраняются ли комментарии YAML при преобразовании в JSON и обратно?

Нет — js-yaml удаляет комментарии на этапе разбора, поэтому круговой обмен YAML → JSON → YAML потеряет каждую строку с префиксом #. Это известное ограничение модели load/dump; если сохранение комментариев критично, используйте библиотеку, осознающую комментарии, например пакет yaml на npm (он предоставляет API CST + AST, спроектированный для сохранения тривии), вместо js-yaml. Для большинства задач по преобразованию конфигов компромисс приемлем: YAML после кругового обмена сохраняет каждый ключ, значение, якорь и алиас, лишь без авторских комментариев.

Что происходит с пользовательскими тегами YAML?

Конвертер использует DEFAULT_SCHEMA в js-yaml, которая понимает !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary и !!timestamp — каждый тег из core- и JSON-схем YAML 1.2. Пользовательские или прикладные теги (например, !Ref в CloudFormation, !vault в Ansible) не распознаются и приводят к понятной ошибке с указанием неподдерживаемого тега. Для CloudFormation в частности используйте поток aws cloudformation package + --output-template-file, чтобы раскрыть пользовательские теги перед вставкой в этот конвертер.

Этот конвертер JSON ↔ YAML поставляется с js-yaml@4.1.0 в одном источнике, поддерживает многодокументные потоки и якоря/алиасы из коробки и сообщает об ошибках разбора YAML со строкой и колонкой, чтобы вы могли исправить источник. Без загрузок, без CDN, без телеметрии — каждый байт остаётся в вашем браузере.