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

RSS

Конвертируйте JSON в YAML или YAML в JSON в один клик — для Kubernetes, Docker Compose, CI-пайплайнов и спецификаций OpenAPI.

Работает на 100% в вашем браузере. Ничего из вставленного не загружается на сервер и не сохраняется.
Исходный JSON или YAML
Результат
Готово.

Как пользоваться конвертером JSON ↔ YAML

  1. Выберите направление: JSON → YAML или YAML → JSON.
  2. Вставьте документ в поле ввода или введите его прямо там.
  3. Результат преобразования появляется мгновенно. Если входные данные некорректны, сообщение об ошибке указывает на строку, которую не удалось разобрать.
  4. Скопируйте результат в свой манифест, файл конвейера или API-клиент.

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

JSON и YAML: одни и те же данные в двух записях

JSON (JavaScript Object Notation) и YAML (YAML Ain't Markup Language) описывают одни и те же базовые структуры: отображения (mappings — объекты с парами «ключ — значение»), последовательности (sequences — массивы) и скаляры (scalars — строки, числа, логические значения и null). Начиная с YAML 1.2, любой корректный документ JSON является и корректным YAML, поэтому преобразование JSON в YAML происходит без потерь. В обратную сторону обычно тоже без потерь, но в YAML есть возможности, которых нет в JSON, — комментарии, якоря и многострочные блочные строки, — и при получении JSON они упрощаются или отбрасываются.

Разработчики постоянно преобразуют одно в другое:

  • Манифесты Kubernetes обычно пишутся на YAML, а kubectl get -o json и сам API работают с JSON.
  • Файлы Docker Compose (compose.yaml) — это YAML; преобразование в JSON помогает, когда их создают скриптами.
  • GitHub Actions и большинство систем CI описывают рабочие процессы в YAML.
  • Спецификации OpenAPI можно писать в любом из двух форматов, и многие инструменты принимают оба.

Вот один и тот же объект в обеих записях:

{"service": "web", "replicas": 3, "ports": [80, 443], "debug": false}
service: web
replicas: 3
ports:
  - 80
  - 443
debug: false

Типичные ловушки YAML

«Проблема Норвегии» (Norway problem)

YAML 1.1 считает логическими значениями слова yes, no, on, off, y и n без кавычек (в разных вариантах регистра). Поэтому в списке кодов стран Норвегия превращается в false в парсерах, следующих YAML 1.1:

countries:
  - GB
  - NO     # YAML 1.1: false   базовая схема YAML 1.2: "NO"
  - SE

YAML 1.2 ограничивает логические значения словами true и false, но многие широко используемые библиотеки по-прежнему по умолчанию ведут себя как в версии 1.1. Надёжная привычка: брать в кавычки любую строку, которую можно принять за значение другого типа: "NO", "on", "1.10", "0755". Классическая ловушка — номера версий: 1.10 без кавычек превращается в число 1.1.

Отступы

YAML выражает вложенность отступами, а табуляция для отступов не допускается. Один сдвинутый пробел меняет структуру или ломает разбор:

spec:
  containers:
    - name: app
      image: nginx
     ports:          # на один пробел меньше: ошибка разбора
        - containerPort: 80

Якоря и псевдонимы

YAML позволяет один раз определить блок с помощью &name и использовать его повторно через *name, часто вместе с ключом слияния <<. В JSON такого нет, поэтому конвертер разворачивает каждый псевдоним в полную копию:

defaults: &defaults
  restart: always
  logging: json
web:
  <<: *defaults
  image: nginx

Учтите, что ключ слияния — расширение YAML 1.1; не каждый парсер его поддерживает.

Советы для аккуратного преобразования

  • Комментарии (# ...) отбрасываются при преобразовании YAML в JSON, потому что в JSON нет синтаксиса комментариев. Если комментарии важны, считайте главным источником файл YAML.
  • Многострочные блочные строки (| сохраняет переводы строк, > сворачивает их в пробелы) становятся в JSON обычными строками с экранированием \n.
  • Целые числа больше 253 могут терять точность в инструментах на JavaScript. Идентификаторы, которые должны остаться точными, берите в кавычки.
  • Чтобы ещё привести результат в порядок, пропустите его через форматирование и валидацию JSON или форматирование и валидацию YAML.
Совет: В одном файле может быть несколько документов YAML, разделённых ---, как это часто бывает в наборах Kubernetes. В JSON такого понятия нет, поэтому разделите файлы с несколькими документами перед преобразованием или ожидайте в результате только один документ.

Часто задаваемые вопросы

Любой ли файл JSON является корректным YAML?

В YAML 1.2 — да: он задумывался как надмножество JSON. Большинство парсеров YAML можно кормить JSON напрямую. Преобразование в блочный YAML просто облегчает чтение и правку.

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

Скаляры без кавычек определяет парсер. Значения вроде no, off, 1e3, 0x1F или 2024-01-01 могут стать логическими значениями, числами или датами в зависимости от версии YAML и библиотеки. Возьмите их в кавычки, чтобы они остались строками.

Можно ли использовать табуляцию в YAML?

Нет. Спецификация YAML запрещает символы табуляции в отступах. Используйте пробелы, обычно два на уровень, и настройте редактор так, чтобы он вставлял пробелы автоматически.

Сохранятся ли комментарии при преобразовании туда и обратно?

Нет. Комментарии исчезают, как только YAML превращается в JSON, и при обратном преобразовании их не вернуть. Храните комментарии в исходном файле YAML.

Обновлено

Скопировано в буфер обмена