Что такое…

JSON или YAML — что выбрать, если это почти один формат

Иллюстрация: одни и те же данные двумя рядом стоящими карточками — со скобками и лесенкой отступов

Начнём с факта, который снимает половину спора: YAML формально — надмножество JSON. Возьми валидный JSON-файл, скорми его YAML-парсеру — он его прочитает. То есть выбирать «JSON или YAML» — это не выбирать между враждующими лагерями. Это выбирать, кто будет читать файл чаще: программа или человек.

Вот одни и те же данные в обоих форматах:

{
  "name": "kodiq-app",
  "port": 3000,
  "features": ["feed", "lessons"]
}
name: kodiq-app
port: 3000
features:
  - feed
  - lessons

Смысл идентичный. Различия — в характере. Разберём их по критериям, которые реально влияют на жизнь.

Таблица: что важно новичку

| Критерий | JSON | YAML | |---|---|---| | Комментарии | ❌ нет вообще | ✅ # как здесь | | Строгость правил | ✅ жёсткие, сюрпризов нет | ⚠️ мягкие, есть сюрпризы | | Ошибки | Заметные: файл не парсится | Коварные: файл парсится, но не так | | Чувствительность к отступам | Нет (отступы — украшение) | Да (отступы — синтаксис) | | Кто обычно пишет | Программа | Человек | | Где встречается | API, обмен данными, ответы ИИ | Конфиги: CI/CD, docker-compose | | Шум в записи | Скобки, кавычки, запятые | Почти чистый текст |

Две строки таблицы стоит развернуть.

Комментарии — главный практический аргумент. В конфиге постоянно нужно пояснить: «не трогать до релиза», «ключ живёт в .env». JSON этого не умеет в принципе — в формате нет синтаксиса комментария. Для файла настроек это дисквалификация, и именно поэтому конфиги мира сошлись на YAML.

Характер ошибок — главный подвох. Ошибёшься в JSON — парсер откажется читать файл целиком, и ты сразу узнаешь (знакомое «Unexpected token» при парсинге — как раз оно). Ошибёшься в YAML — файл, скорее всего, прочитается, но со смыслом, которого ты не имел в виду: съехавший отступ тихо перевесил настройку в другую секцию, голое no стало false. JSON падает громко, YAML ошибается тихо — а тихая ошибка всегда дороже.

Кому что подойдёт

Вердикт простой, без «зависит»:

  • Обмен данными между программами — JSON. API отвечают JSON'ом, структурированный вывод у моделей просят в JSON, данные хранят и пересылают в JSON. Здесь строгость — достоинство: никакой двусмысленности.
  • Файлы настроек, которые правит человек, — YAML. Комментарии, никакого синтаксического шума, легко читать глазами. Цена — дисциплина отступов и кавычки вокруг «подозрительных» строк.
  • Ты вообще не выбираешь чаще, чем думаешь. GitHub Actions требует YAML, package.json — JSON, API отвечает тем, чем отвечает. Реальный навык — не «выбрать правильный формат», а уверенно читать оба. Благо, как видно из примера выше, это один навык, а не два.

И маленький лайфхак на стыке: если YAML-файл капризничает, а причину не видно — попроси ИИ перевести его в JSON. Перевод мгновенно обнажает структуру: сразу видно, что куда вложено на самом деле.

А что с TOML и другими форматами?

Есть третий заметный формат — TOML (pyproject.toml в Python, Cargo.toml в Rust): задуман как «конфиг без сюрпризов YAML». Встретишь — не пугайся: та же идея «ключ = значение», читается с листа. Но за пределами своих экосистем он редок — для новичка приоритет: JSON и YAML.

Можно ли конвертировать один в другой?

Да, в обе стороны и без потерь для типовых случаев — структура данных у них общая (значения, списки, вложенные объекты). Любой ИИ-ассистент делает это по запросу «переведи в YAML/JSON» — удобно, чтобы поглядеть на файл «другими глазами».

Почему ИИ отвечает JSON, а не YAML?

Потому что ответ модели читает программа, а не человек, — а для программ JSON надёжнее: строгий синтаксис проще проверить, битый ответ виден сразу при парсинге. YAML с его тихими ошибками здесь был бы риском.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →