alltools.one
Data
2025-06-21
7 min
alltools.one Team
JSONYAMLConversionConfigurationDevOps

Конвертация 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

Когда использовать каждый формат

КритерийJSONYAML
Редактирование человекомСложнее (скобки, запятые)Проще (чистый синтаксис)
Машинный парсингБыстрееМедленнее
КомментарииНе поддерживаютсяПоддерживаются
Обмен даннымиСтандарт (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 — однозначный выбор.

Связанные ресурсы

Published on 2025-06-21
JSON to YAML Conversion: A Complete Migration Guide | alltools.one