DevOps-инженер экспортирует конфигурацию Kubernetes в YAML, но должен отправить её в API, принимающий только JSON. Аналитик получает данные ответа API в JSON, но ему нужна таблица. Специалист по данным экспортирует CSV из базы данных, но ему нужен структурированный JSON для веб-дашборда.
Конвертация форматов — это не просто механическая операция. Каждый формат идёт на разные компромиссы, и понимание того, что теряется при конвертации, так же важно, как знание самого процесса.
Три формата, три философии
Каждый формат был разработан для разной аудитории и разных задач:
| Формат | Год создания | Назначение | Ключевая философия |
|---|---|---|---|
| CSV | ~1972 | Обмен данными между программами | Максимальная простота — только строки и столбцы |
| JSON | 2001 | Обмен данными в вебе | Машиночитаемые структурированные данные со строгими правилами |
| YAML | 2001 | Конфигурационные файлы | Человекочитаемые структурированные данные с минимальным синтаксисом |
CSV предполагает, что ваши данные — плоская таблица. Каждое значение — строка. Нет понятия вложенности, типизации или метаданных.
JSON предполагает, что у ваших данных есть структура — объекты, массивы, типы (строки, числа, булевы значения, null). Он строг и однозначен, что делает его идеальным для машин, но многословным для людей.
YAML предполагает, что файл будет читать и редактировать человек. Он использует отступы вместо фигурных скобок, поддерживает комментарии и имеет более свободный синтаксис. Технически YAML является надмножеством JSON — любой валидный документ JSON также является валидным YAML.
YAML — надмножество JSON Вы можете вставить JSON-документ непосредственно в YAML-парсер, и он будет работать. Обратное неверно — такие возможности YAML, как комментарии, якоря и многострочные строки, не имеют эквивалента в JSON.
Реальные сценарии конвертации
Миграция конфигурации (JSON в YAML, YAML в JSON)
Это самая распространённая конвертация. Разные инструменты ожидают разные форматы конфигурации:
- Docker Compose, Kubernetes, GitHub Actions, Ansible используют YAML
- package.json, tsconfig.json, ESLint используют JSON
- Переход между инструментами часто означает конвертацию конфигураций
Эта конвертация безпотерь в обоих направлениях для содержимого данных — но комментарии YAML теряются при конвертации в JSON, поскольку в JSON нет синтаксиса комментариев.
Анализ данных (JSON в CSV)
Ответы API приходят в JSON. Аналитикам нужны таблицы. Эта конвертация хорошо работает для плоских JSON-массивов — массивы объектов с одинаковыми ключами естественно отображаются на строки и столбцы.
Но она ломается при вложенных данных. JSON-объект с полем address.city и массивом skills не имеет естественного CSV-представления. Конвертер должен выбрать: развернуть вложенные ключи (address.city становится столбцом), сериализовать вложенные значения как строки или отбросить их.
Импорт данных (CSV в JSON)
Обратный сценарий: импорт данных из таблицы в веб-приложение или API. Конвертация CSV в JSON создаёт массив объектов с заголовками столбцов в качестве ключей. Проблема в том, что CSV не содержит информации о типах — число 42, строка "42" и булево true — всё это просто текст в CSV. Конвертеру приходится угадывать типы.
Человекочитаемость (JSON в YAML)
Иногда нужно просто сделать плотный JSON-файл конфигурации читаемым. Конвертация в YAML даёт чистые отступы и возможность добавить комментарии для документации. Это особенно ценно для больших конфигурационных файлов, которые поддерживает команда.
Что теряется при конвертации
Это критически важное знание, которое экономит время при отладке:
| Конвертация | Что теряется |
|---|---|
| YAML в JSON | Комментарии (в JSON нет синтаксиса комментариев) |
| JSON в CSV | Вложенность (CSV плоский), типы (всё становится текстом), массивы |
| CSV в JSON | Ничего (но типы нужно выводить — "42" vs 42) |
| CSV в YAML | Ничего (та же проблема с выводом типов) |
| JSON в YAML | Ничего (YAML — надмножество JSON) |
| YAML в CSV | Комментарии, вложенность, типы, якоря/псевдонимы |
Закономерность ясна: конвертации в CSV теряют больше всего информации, потому что CSV — простейший формат. Конвертации между JSON и YAML почти безпотерь. А комментарии YAML всегда теряются при выходе из YAML.
Двусторонняя vs. односторонняя JSON-YAML и YAML-JSON фактически двусторонние (безопасны для цикла конвертации, кроме комментариев). JSON-CSV и YAML-CSV — односторонние для сложных данных: вложенность невозможно восстановить из плоского CSV.
Распространённые ловушки при конвертации
Ловушки приведения типов в YAML
YAML автоматически интерпретирует некоторые строки как нестроковые типы. Слово no становится булевым false. Слово yes становится true. Строка 1.0 становится числом с плавающей точкой. Коды стран вроде NO (Норвегия) печально известны вызываемыми ошибками. Всегда заключайте неоднозначные значения в кавычки в YAML.
Путаница с разделителями и кодировкой CSV
Не все CSV используют запятые. Европейские CSV часто используют точку с запятой (потому что запятая — десятичный разделитель во многих европейских числовых форматах). Значения, разделённые табуляцией (TSV), — ещё один вариант. А несоответствие кодировок (UTF-8 vs Latin-1) приводит к искажённым символам с диакритикой.
Проблема завершающей запятой в JSON
JSON не допускает завершающих запятых. Это валидный JavaScript: {"a": 1, "b": 2,} — но невалидный JSON. Одна завершающая запятая вызывает ошибку парсинга.
Производительность при больших наборах данных
Для наборов данных с миллионами строк CSV значительно эффективнее JSON или YAML. JSON добавляет фигурные скобки, квадратные скобки и кавычки к каждому значению. CSV с 1 миллионом строк может весить 50 МБ; эквивалентный JSON — 150 МБ.
Выбор правильного формата с самого начала
Вместо конвертации постфактум правильный выбор формата изначально позволяет избежать потери информации:
- Табличные данные для электронных таблиц или баз данных — CSV
- Структурированные данные для API или веб-приложений — JSON
- Конфигурация, которую будут редактировать люди — YAML
- Сложные вложенные данные с комментариями — YAML
- Обмен данными между системами — JSON
Узнать больше
Конвертируйте между JSON, YAML и CSV мгновенно с помощью браузерных инструментов:
- Конвертация форматов данных — вставьте данные, выберите целевой формат, скачайте результат
- Форматирование JSON — валидация, форматирование и минификация JSON
- Конвертер JSON в CSV — конвертация JSON-массивов в CSV для электронных таблиц
- Конвертер YAML-JSON — конвертация между YAML и JSON с учётом комментариев
