Чи налаштовуєте ви веб-застосунок, обмінюєтесь даними між сервісами, аналізуєте експорт з таблиці чи читаєте відповідь 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 playbooks, конфігурація 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, форматування та валідації ваших даних, а також пов'язані посібники для роботи зі структурованими даними у ваших проєктах.
