Конвертация JSON в YAML: полное руководство по миграции
JSON и YAML представляют одни и те же структуры данных с разным синтаксисом. Конвертация между ними в большинстве случаев проста, но граничные случаи с типами, многострочными строками и комментариями требуют внимания. Это руководство охватывает полный маппинг между форматами.
Маппинг синтаксиса
Объекты / Маппинги
JSON:
{
"database": {
"host": "localhost",
"port": 5432,
"name": "myapp"
}
}
YAML:
database:
host: localhost
port: 5432
name: myapp
Массивы / Последовательности
JSON:
{
"servers": ["web1", "web2", "web3"]
}
YAML:
servers:
- web1
- web2
- web3
Вложенные структуры
JSON:
{
"services": [
{
"name": "api",
"ports": [8080, 8443],
"env": {"NODE_ENV": "production"}
}
]
}
YAML:
services:
- name: api
ports:
- 8080
- 8443
env:
NODE_ENV: production
Конвертируйте мгновенно с помощью нашего конвертера JSON в YAML.
Граничные случаи, на которые стоит обратить внимание
1. Комментарии
YAML поддерживает комментарии; JSON — нет. При конвертации YAML в JSON все комментарии теряются:
# Этот комментарий будет потерян в JSON
database:
host: localhost # Этот тоже
2. Многострочные строки
YAML обладает мощным синтаксисом для многострочных строк, которого нет в JSON:
description: |
This is a multi-line
string that preserves
line breaks.
В JSON это становится:
{
"description": "This is a multi-line\nstring that preserves\nline breaks.\n"
}
3. Неоднозначность типов
YAML автоматически определяет типы, что может вызвать проблемы:
version: 1.0 # Float, а не строка "1.0"
port: 080 # Восьмеричное 64, а не строка "080"
country: NO # Boolean false, а не строка "NO"
В JSON типы явные:
{
"version": "1.0",
"port": "080",
"country": "NO"
}
При конвертации JSON в YAML добавляйте кавычки вокруг значений, которые могут быть неправильно интерпретированы.
4. Пустые значения
Оба формата поддерживают null, но синтаксис отличается:
value: null # Явно
value: ~ # Сокращение YAML
value: # Пустое значение = null
{ "value": null }
5. Специальные символы в ключах
Ключи JSON могут содержать любые символы Unicode. Ключи YAML со специальными символами требуют кавычек:
"content-type": "application/json" # Дефис требует кавычек
simple_key: value # Подчёркивание допустимо
Конвертация в командной строке
Использование yq (обработчик YAML)
# JSON в YAML
yq -P input.json > output.yaml
# YAML в JSON
yq -o=json input.yaml > output.json
Использование Python
# JSON в YAML
python3 -c "import json, yaml, sys; print(yaml.dump(json.load(sys.stdin), default_flow_style=False))" < input.json > output.yaml
# YAML в JSON
python3 -c "import json, yaml, sys; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < input.yaml > output.json
Совместное использование jq + yq
# Обработка JSON с выводом в YAML
cat config.json | jq '.database' | yq -P
Когда использовать каждый формат
| Критерий | JSON | YAML |
|---|---|---|
| Редактирование человеком | Сложнее (скобки, запятые) | Проще (чистый синтаксис) |
| Машинный парсинг | Быстрее | Медленнее |
| Комментарии | Не поддерживаются | Поддерживаются |
| Обмен данными | Стандарт (API) | Редко |
| Конфигурация | Приемлемо | Предпочтительно |
| Строгость | Строгий (хорошо) | Гибкий (рискованно) |
Используйте JSON для: обмена данными через API, хранения данных, конфигов, генерируемых машиной, браузерных сред.
Используйте YAML для: конфигов, редактируемых человеком, Docker Compose, Kubernetes, CI/CD-конвейеров, Ansible.
Для более детального сравнения читайте нашу статью YAML vs JSON.
Часто задаваемые вопросы
YAML является надмножеством JSON?
Да, начиная с YAML 1.2 (2009), каждый валидный документ JSON также является валидным YAML. Парсер YAML может парсить JSON напрямую. Однако обратное неверно — возможности YAML, такие как комментарии, якоря и многострочные строки, не имеют эквивалента в JSON.
Какой формат быстрее парсится, JSON или YAML?
JSON значительно быстрее парсится практически на всех языках. JSON-парсеры проще, потому что у формата меньше синтаксиса для обработки. Для конфигурационных файлов, загружаемых однократно при запуске, разница незначительна. Для высокопроизводительной обработки данных JSON — однозначный выбор.
Связанные ресурсы
- Конвертер JSON в YAML — Конвертируйте между форматами мгновенно
- YAML vs JSON — Детальное сравнение форматов
- Руководство по синтаксису YAML — Изучите YAML с нуля