Настраиваете ли вы веб-приложение, обмениваетесь данными между сервисами, анализируете экспорт из таблицы или читаете ответ API — вы столкнётесь с данными, хранящимися в структурированных текстовых форматах. Четыре самых распространённых — JSON, YAML, CSV и XML.
Каждый формат был создан с разными целями, и выбор подходящего зависит от вашей задачи. В этой статье объясняется, что представляет собой каждый формат, как он выглядит, когда его использовать и как они соотносятся друг с другом.
JSON — JavaScript Object Notation
JSON стал доминирующим форматом обмена данными в вебе. Несмотря на название, он не зависит от языка программирования и используется повсеместно.
Пример синтаксиса:
{
"name": "Alice Martin",
"age": 34,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Lyon",
"country": "France"
}
}
Основные особенности:
- Пары ключ-значение с чистым, читаемым синтаксисом
- Поддерживает строки, числа, логические значения, массивы, объекты и null
- Комментарии не допускаются в стандартном JSON
- Строгий синтаксис — завершающие запятые и одинарные кавычки являются ошибками
Типичные сценарии использования: REST API, файлы конфигурации (package.json, tsconfig.json), NoSQL-базы данных (MongoDB), обмен данными между фронтендом и бэкендом.
Полезно знать. Строгий синтаксис JSON — это одновременно и сила, и слабость. Он делает парсинг надёжным и однозначным, но также означает, что одна пропущенная или лишняя запятая сломает весь файл.
YAML — YAML Ain't Markup Language
YAML был создан как наиболее удобный для человека формат сериализации данных. Он использует отступы вместо скобок и особенно популярен для файлов конфигурации.
Пример синтаксиса:
name: Alice Martin
age: 34
skills:
- Python
- SQL
- Docker
address:
city: Lyon
country: France
Основные особенности:
- Структура на основе отступов (без скобок и фигурных скобок)
- Поддерживает комментарии через
# - Поддерживает все типы данных JSON и дополнительные (даты, многострочные строки)
- Чувствителен к пробелам — неправильные отступы ломают файл
Типичные сценарии использования: файлы Docker Compose, манифесты Kubernetes, CI/CD-пайплайны (GitHub Actions, GitLab CI), плейбуки Ansible, конфигурация Hugo/Jekyll.
YAML является надмножеством JSON, то есть любой корректный JSON-документ также является корректным YAML. Однако гибкость YAML может быть палкой о двух концах — его неявное приведение типов (например, yes интерпретируется как логическое true, а 3.10 превращается в 3.1) стало причиной множества скрытых ошибок.
CSV — Comma-Separated Values
CSV — простейший формат структурированных данных. Он хранит табличные данные как обычный текст, где каждая строка — это запись, а значения разделены запятыми (или иногда точкой с запятой, табуляцией или другими разделителями).
Пример синтаксиса:
name,age,city,country
Alice Martin,34,Lyon,France
Bob Dupont,28,Paris,France
Carol Smith,41,London,UK
Основные особенности:
- Предельная простота — просто текст с разделителями
- Нет типов данных — всё является строкой
- Нет стандартного способа представления вложенных данных
- Нет официального универсального стандарта (RFC 4180 существует, но соблюдается не повсеместно)
- Размер файлов очень мал
Типичные сценарии использования: экспорт из таблиц, импорт/экспорт баз данных, анализ данных (pandas, R), простой обмен данными, лог-файлы.
Простота CSV — это одновременно его главная сила и главное ограничение. Он идеален для плоских табличных данных, но не может представлять иерархические структуры. Краевые случаи (запятые внутри значений, многострочные поля, проблемы с кодировкой) делают парсинг сложнее, чем кажется на первый взгляд.
XML — Extensible Markup Language
XML был доминирующим форматом обмена данными до того, как JSON занял его место. Он использует синтаксис на основе тегов, похожий на HTML, и поддерживает сложные функции, такие как схемы, пространства имён и преобразования.
Пример синтаксиса:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>Alice Martin</name>
<age>34</age>
<skills>
<skill>Python</skill>
<skill>SQL</skill>
<skill>Docker</skill>
</skills>
<address>
<city>Lyon</city>
<country>France</country>
</address>
</person>
Основные особенности:
- Структура на основе тегов с открывающими и закрывающими тегами
- Поддерживает атрибуты, пространства имён, схемы (XSD) и преобразования (XSLT)
- Поддерживает комментарии
- Очень многословен по сравнению с другими форматами
- Чрезвычайно чётко определённый стандарт со строгой валидацией
Типичные сценарии использования: SOAP веб-сервисы, корпоративные интеграции, форматы документов (DOCX, SVG, RSS), конфигурационные файлы в экосистемах Java/.NET, обмен государственными и финансовыми данными.
XML более многословен, чем JSON или YAML, но его возможности валидации по схеме делают его незаменимым в контекстах, где критически важны целостность данных и формальные контракты между системами.
Сравнение форматов
| Характеристика | JSON | YAML | CSV | XML |
|---|---|---|---|---|
| Читаемость | Хорошая | Отличная | Хорошая (табличные данные) | Средняя |
| Многословность | Низкая | Низкая | Очень низкая | Высокая |
| Комментарии | Нет | Да | Нет | Да |
| Вложенные данные | Да | Да | Нет | Да |
| Типы данных | Базовые | Расширенные | Нет (всё строки) | Через схему |
| Валидация по схеме | JSON Schema | Нет стандарта | Нет | XSD |
| Размер файла | Малый | Малый | Минимальный | Большой |
| Скорость парсинга | Быстрая | Средняя | Быстрая | Средняя |
| Основная область | Веб-API | DevOps-конфигурация | Данные/таблицы | Корпоративный сектор |
Когда что использовать
- Выбирайте JSON, когда создаёте веб-API, храните конфигурацию JavaScript/TypeScript-проектов или обмениваетесь данными между сервисами. Это выбор по умолчанию для большинства современных приложений.
- Выбирайте YAML, когда пишете конфигурационные файлы, которые люди будут часто читать и редактировать. Его читаемость и поддержка комментариев делают его идеальным для DevOps и инфраструктуры как кода.
- Выбирайте CSV, когда работаете с табличными данными, импортируете/экспортируете из таблиц или баз данных, или когда размер файла должен быть минимальным. Не используйте для иерархических данных.
- Выбирайте XML, когда работаете с корпоративными системами, SOAP API или контекстами, требующими формальной валидации по схеме. Также подходит, когда нужна документоориентированная разметка (например, SVG или RSS).
Конвертация между форматами
Конвертация между этими форматами — распространённая задача. Несколько моментов, которые стоит учитывать:
- JSON в YAML (и обратно) обычно проходит без потерь, поскольку YAML является надмножеством JSON.
- CSV в JSON/YAML хорошо работает для плоских данных, но требует решений о структуре для вложенного вывода.
- XML в JSON может потерять информацию (атрибуты, пространства имён, порядок), потому что в JSON нет эквивалентных концепций.
- Любой формат в CSV работает только если данные плоские или могут быть осмысленно «выровнены».
Совет. При конвертации между форматами всегда проверяйте результат. Автоматические конвертации могут незаметно терять данные, особенно при работе с атрибутами XML, приведением типов YAML или краевыми случаями кодировки CSV.
Узнать больше
ToolK.io предоставляет бесплатные инструменты для конвертации между JSON, YAML, CSV и XML, форматирования и валидации данных, а также связанные руководства для работы со структурированными данными в ваших проектах.
