Как пользоваться конвертером JSON ↔ YAML
- Выберите направление: JSON → YAML или YAML → JSON.
- Вставьте документ в поле ввода или введите его прямо там.
- Результат преобразования появляется мгновенно. Если входные данные некорректны, сообщение об ошибке указывает на строку, которую не удалось разобрать.
- Скопируйте результат в свой манифест, файл конвейера или 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.
---, как это часто бывает в наборах 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.
Обновлено