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 і бачите «Мü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-файлів
Конвертуйте ваші дані зараз:
Усі інструменти безкоштовні та працюють прямо у вашому браузері.