CSV vs JSON vs XML: выбор правильного формата данных
Любой обмен данными требует выбора формата. CSV, JSON и XML — три наиболее распространённых варианта, каждый со своими сильными сторонами. Неверный выбор формата приводит к проблемам с парсингом, раздутым объёмам данных и потерянному времени разработки. Это руководство поможет вам выбрать правильный инструмент для задачи.
Обзор форматов
CSV (Comma-Separated Values)
name,age,city
Alice,30,London
Bob,25,Paris
Charlie,35,Tokyo
- Структура: Плоская, табличная (строки и столбцы)
- Система типов: Отсутствует (всё является текстом)
- Вложенность: Не поддерживается
- Размер: Наименьший для табличных данных
JSON (JavaScript Object Notation)
[
{"name": "Alice", "age": 30, "city": "London"},
{"name": "Bob", "age": 25, "city": "Paris"},
{"name": "Charlie", "age": 35, "city": "Tokyo"}
]
- Структура: Иерархическая (объекты, массивы)
- Система типов: String, number, boolean, null, object, array
- Вложенность: Нативная поддержка
- Размер: Средний
XML (eXtensible Markup Language)
<people>
<person>
<name>Alice</name>
<age>30</age>
<city>London</city>
</person>
<person>
<name>Bob</name>
<age>25</age>
<city>Paris</city>
</person>
</people>
- Структура: Иерархическая с атрибутами и элементами
- Система типов: Через XML Schema (XSD)
- Вложенность: Нативная поддержка
- Размер: Наибольший (многословные теги)
Детальное сравнение
| Характеристика | CSV | JSON | XML |
|---|---|---|---|
| Читаемость | Высокая (табличная) | Высокая | Низкая (многословный) |
| Размер файла | Наименьший | Средний | Наибольший |
| Скорость парсинга | Самая высокая | Высокая | Самая низкая |
| Вложенность | Нет | Да | Да |
| Схема | Нет стандарта | JSON Schema | XSD, DTD |
| Комментарии | Нет | Нет | Да |
| Метаданные | Нет | Нет | Да (атрибуты) |
| Потоковая обработка | Построчно | SAX/потоковая | SAX/StAX |
| Двоичные данные | Нет | Строка Base64 | Base64 или CDATA |
| Пространства имён | Нет | Нет | Да |
Когда использовать CSV
Лучше всего подходит для:
- Данных электронных таблиц и экспорта из баз данных
- Анализа данных (pandas, R, Excel)
- Простых плоских данных с одинаковыми столбцами
- Максимальной совместимости (каждый инструмент поддерживает CSV)
- Больших наборов данных, где размер имеет значение
Избегайте, когда:
- Данные имеют вложенную или иерархическую структуру
- Необходимо сохранить несколько типов данных
- Значения столбцов содержат запятые, переносы строк или кавычки (краевые случаи)
Работайте с данными CSV с помощью нашего CSV Редактора или конвертируйте в JSON с помощью нашего конвертера CSV в JSON.
Когда использовать JSON
Лучше всего подходит для:
- Коммуникации через веб-API (ответы REST, GraphQL)
- Файлов конфигурации (package.json, tsconfig.json)
- Документоориентированных баз данных (MongoDB, CouchDB)
- Браузерных сред (нативный парсинг JavaScript)
- Данных с переменной структурой (у некоторых записей есть поля, которых нет у других)
Избегайте, когда:
- Данные чисто табличные (CSV проще и меньше)
- Нужны возможности XML (пространства имён, схемы, XSLT)
- Нужны комментарии в файлах данных (используйте YAML вместо этого)
Форматируйте и валидируйте JSON с помощью нашего JSON Форматирования.
Когда использовать XML
Лучше всего подходит для:
- Корпоративных систем (SOAP, XHTML, RSS, SVG)
- Разметки документов (смешанное содержимое — текст с встроенной структурой)
- Когда нужны атрибуты наряду с элементами
- Строгих требований к валидации схемы (XSD)
- Преобразований XSLT
- Отраслевых стандартов (здравоохранение HL7, финансы XBRL)
Избегайте, когда:
- Создаёте современные веб-API (JSON — стандарт)
- Данные табличные (CSV проще)
- Размер файла и скорость парсинга важны (JSON компактнее)
Сравнение размеров
Один и тот же набор данных из 1000 записей:
| Формат | Размер файла | Время парсинга (относительное) |
|---|---|---|
| CSV | 45 КБ | 1x (базовый) |
| JSON | 85 КБ | 1.5x |
| XML | 140 КБ | 3x |
Многословность XML — открывающие теги, закрывающие теги и имена элементов, повторяющиеся для каждого значения — примерно утраивает размер по сравнению с CSV.
Паттерны миграции
CSV в JSON
import csv, json
with open('data.csv') as f:
reader = csv.DictReader(f)
data = list(reader)
with open('data.json', 'w') as f:
json.dump(data, f, indent=2)
JSON в CSV
import csv, json
with open('data.json') as f:
data = json.load(f)
with open('data.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
XML в JSON
import xmltodict, json
with open('data.xml') as f:
data = xmltodict.parse(f.read())
with open('data.json', 'w') as f:
json.dump(data, f, indent=2)
Современный ландшафт
Тенденция последнего десятилетия очевидна: JSON в значительной степени заменил XML для веб-API и конфигураций. Тем не менее CSV остаётся доминирующим форматом обмена данными в аналитике и бизнес-контексте, а XML сохраняется в корпоративных и государственных системах.
Более новые альтернативы:
- YAML: Дружелюбный для человека формат конфигурации (заменяет как JSON, так и XML для конфигураций)
- Protocol Buffers / MessagePack: Бинарные форматы для высокопроизводительных систем
- Parquet / Arrow: Колоночные форматы для аналитики больших данных
Для сравнения JSON и YAML смотрите наше руководство YAML vs JSON.
FAQ
Можно ли конвертировать между этими форматами без потери данных?
Конвертация CSV в JSON без потерь для плоских данных (хотя типы теряются — числа становятся строками в CSV). Конвертация JSON в CSV теряет иерархическую структуру (вложенные объекты нужно разворачивать). Конвертация XML в JSON в основном без потерь, но атрибуты и смешанное содержимое могут быть проблематичными. Всегда тестируйте двустороннюю конвертацию с вашими конкретными данными.
Какой формат выбрать для нового API?
JSON. Это де-факто стандарт для современных веб-API с нативной поддержкой в браузерах, отличным инструментарием и лучшим балансом читаемости и размера. Используйте JSON Schema для валидации. Единственное исключение — интеграция с устаревшими корпоративными системами, требующими XML.
Связанные ресурсы
- CSV Редактор — Редактируйте и очищайте данные CSV
- JSON Форматирование — Форматируйте и валидируйте JSON
- Руководство по конвертации CSV в JSON — Пошаговая конвертация