JSON, YAML, CSV: когда использовать какой формат и как конвертировать
Вы скачиваете набор данных, и он в формате CSV. Ваш API возвращает JSON. Ваш файл конфигурации — в YAML. Коллега присылает вам JSON-файл и просит конвертировать его в таблицу. Другой коллега передаёт вам YAML-конфигурацию, и вам нужно перевести её в JSON для другого инструмента.
Конвертация форматов данных — одна из тех задач, которые кажутся тривиальными, пока вы не начинаете их выполнять. Понимание того, когда использовать какой формат и как переключаться между ними, экономит реальное время.
Три формата: обзор
JSON (JavaScript Object Notation)
{
"name": "Alice",
"age": 30,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Berlin",
"country": "Germany"
}
}
Что это: Текстовый формат для структурированных данных, поддерживающий объекты (пары ключ-значение), массивы (упорядоченные списки), строки, числа, логические значения и null.
Сильные стороны: Машиночитаемый, широко поддерживается во всех языках программирования, естественно обрабатывает вложенные данные, строгий синтаксис предотвращает неоднозначность.
Слабые стороны: Многословный (множество фигурных скобок, квадратных скобок и кавычек), менее читаемый для человека, чем YAML, не поддерживает комментарии.
YAML (YAML Ain't Markup Language)
name: Alice
age: 30
skills:
- Python
- SQL
- Docker
address:
city: Berlin
country: Germany
Что это: Человекочитаемый формат сериализации данных, использующий отступы вместо фигурных скобок и квадратных скобок. Является надмножеством JSON, то есть валидный JSON — это также валидный YAML.
Сильные стороны: Исключительно читаемый, поддерживает комментарии, меньше визуального шума, отлично подходит для файлов конфигурации.
Слабые стороны: Чувствителен к отступам (легко сломать неправильными пробелами), некоторые неожиданные особенности парсинга, медленнее парсится по сравнению с JSON.
CSV (Comma-Separated Values)
name,age,city,country
Alice,30,Berlin,Germany
Bob,25,London,UK
Charlie,35,Paris,France
Что это: Плоский текстовый формат, в котором каждая строка — это запись, а значения внутри строки разделены запятыми (иногда точками с запятой или табуляцией).
Сильные стороны: Универсальный (каждая табличная программа, база данных и инструмент для работы с данными поддерживает его), компактный для табличных данных, легко читается и создаётся.
Слабые стороны: Не поддерживает вложенные данные, нет типов данных (всё является строкой), нет стандарта для специальных символов, ограничен плоскими таблицами.
Знаете ли вы? YAML технически является надмножеством JSON. Это означает, что любой валидный документ JSON автоматически является валидным документом YAML. Вы можете вставить JSON в парсер YAML, и он сработает. Обратное неверно — возможности YAML (комментарии, якоря, многострочные строки) не имеют эквивалента в JSON.
Когда использовать какой формат
| Сценарий использования | Лучший формат | Почему |
|---|---|---|
| Запросы и ответы API | JSON | Отраслевой стандарт, каждый язык имеет нативную поддержку |
| Файлы конфигурации | YAML | Человекочитаемый, поддерживает комментарии для документирования |
| Табличные данные | CSV | Открывается непосредственно в Excel, Google Sheets и т.д. |
| Экспорт из баз данных | CSV | Плоские табличные данные напрямую соответствуют строкам и столбцам |
| Сложные вложенные данные | JSON или YAML | CSV не может представлять вложенность |
| Обмен данными между системами | JSON | Однозначный парсинг, строгая спецификация |
| Конфигурация, редактируемая человеком | YAML | Легче читать и редактировать вручную |
| Простые списки данных | CSV | Лёгкий, без лишних накладных расходов |
Конвертация между форматами
JSON в YAML
Это самая распространённая конвертация конфигураций. У вас есть JSON-конфигурация от одного инструмента, и вам нужен YAML для другого. Конвертация проста, потому что YAML поддерживает всё, что есть в JSON.
{"server": {"host": "0.0.0.0", "port": 8080}}
Превращается в:
server:
host: 0.0.0.0
port: 8080
YAML в JSON
Переход от YAML к JSON тоже прост, но вы теряете комментарии (JSON не поддерживает их), а результат более многословный.
JSON в CSV
Хорошо работает для плоских массивов JSON (массивов объектов с одинаковыми ключами). Каждый объект становится строкой, а каждый ключ — заголовком столбца.
[
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
Превращается в:
name,age
Alice,30
Bob,25
Предупреждение Конвертация JSON в CSV перестаёт работать, когда JSON содержит вложенные объекты или массивы. CSV — плоский формат, он не может представить массив «skills» или вложенный объект «address». Вложенные данные нужно либо развернуть (address.city, address.country как отдельные столбцы), либо сериализовать как строку внутри ячейки CSV.
CSV в JSON
Каждая строка становится объектом, а заголовки столбцов — ключами. Это работает чисто для простых табличных данных.
CSV в YAML
Менее распространённый вариант, но следует той же логике: каждая строка становится YAML-отображением, а весь файл — YAML-последовательностью.
Распространённые ошибки
Проблемы с кодировкой CSV
CSV-файлы могут использовать разные кодировки символов (UTF-8, Latin-1, Windows-1252). Если вы открываете CSV и видите искажённые символы вроде «München» вместо «München», это несоответствие кодировок. Всегда используйте UTF-8, когда это возможно.
Путаница с разделителями в CSV
Не все CSV используют запятые. Европейские CSV часто используют точки с запятой, потому что запятые используются как десятичные разделители во многих европейских числовых форматах. Значения, разделённые табуляцией (TSV), — ещё один распространённый вариант.
Ошибки отступов в YAML
YAML использует отступы (пробелы, никогда табуляцию) для определения структуры. Непоследовательные отступы или смешивание табуляции и пробелов приводят к ошибкам парсинга или молчаливой неправильной интерпретации. Используйте ровно 2 пробела на уровень отступа и настройте редактор на вставку пробелов вместо табуляции.
Предупреждение В YAML строка no парсится как логическое значение false, а yes — как true. Строка 1.0 парсится как число. Если вы имеете в виду именно строки «no», «yes» или «1.0», их нужно заключить в кавычки: "no", "yes", "1.0". Это одна из самых печально известных ловушек YAML.
Завершающие запятые в JSON
JSON не допускает завершающих запятых. Это допустимо в JavaScript, но недопустимо в JSON:
{"name": "Alice", "age": 30,} // Невалидный JSON: завершающая запятая
Производительность при больших файлах
Для очень больших наборов данных (миллионы строк) CSV эффективнее, чем JSON или YAML, потому что у него минимальные накладные расходы на каждую запись. JSON добавляет фигурные скобки и кавычки для каждого значения, что значительно увеличивает размер файла для больших табличных данных.
Практические инструменты для конвертации
Для быстрых разовых конвертаций браузерные инструменты — самый быстрый вариант. Вы вставляете или загружаете данные, выбираете целевой формат и мгновенно получаете результат.
Совет Мгновенная конвертация между форматами JSON, YAML и CSV: Как конвертировать форматы данных. Вставьте данные, выберите целевой формат и скопируйте или скачайте результат.
Для работы именно с JSON незаменим форматировщик, который валидирует и красиво оформляет ваш JSON:
- JSON Formatter — валидация, форматирование и минификация JSON
- JSON to CSV Converter — конвертация массивов JSON в CSV
- YAML-JSON Converter — конвертация между YAML и JSON
- CSV Viewer — просмотр и исследование CSV-файлов
Конвертируйте данные прямо сейчас:
Все инструменты бесплатны и работают прямо в вашем браузере.