Дані

CSV, JSON і YAML

Три формати містять більшу частину структурованих даних у світі. Конвертувати між ними легко; конвертувати без непомітного пошкодження чогось — потрібна певна обережність.

Опубліковано

Для чого кожен із них

CSV — це таблиця: рядки й стовпці, більше нічого. Його можна прочитати будь-де, він мізерний за розміром і не може виразити нічого вкладеного. JSON — це дерево: об'єкти всередині масивів усередині об'єктів, і саме ним розмовляє майже кожен веб-API. YAML виражає ті самі структури, що й JSON, але за допомогою відступів замість фігурних дужок, що робить його набагато приємнішим для читання й редагування людьми, і саме тому файли конфігурації дедалі частіше переходять на нього.

Пастка приведення типів

Саме вона насправді коштує людям грошей. CSV містить лише текст — немає способу позначити значення як число, дату чи рядок. Тож конвертери здогадуються, і здогадки часто помилкові:

  • Поштовий індекс на кшталт 01234 стає числом 1234 і втрачає початковий нуль.
  • Код товару на кшталт 1-2 стає датою.
  • Довгий номер рахунку стає числом із рухомою комою й втрачає останні цифри.
  • NA, що означає Північну Америку, стає «недоступно».

Кожна з цих помилок непомітна. Тому ретельна конвертація CSV у JSON має залишати кожне значення рядком і дозволяти вам вирішувати, що з ним робити, — що конвертер цього сайту робить навмисно, хоча спершу це виглядає педантичним.

Що не переживе перехід у CSV

Вкладеність. Масив JSON із пласких об'єктів стає чистою таблицею. Щойно значення саме є об'єктом чи масивом, для нього немає стовпця. Варіанти: розгорнути через складені ключі, серіалізувати вкладену частину назад у текст усередині її комірки або відкинути її — а мовчки відкинути гірше за все. Записати її назад як текст JSON у комірці принаймні зберігає дані придатними до відновлення.

Гострі кути YAML

YAML приємно читати й напрочуд легко в ньому помилитися.

  • Відступи — це структура, а табуляції заборонені. Зайвий пробіл змінює зміст, а не викликає помилку.
  • Деякі голі слова є булевими значеннями. У старішому YAML y, n, on, off, yes і no розбираються як true або false, тож стовпець країн із NO для Норвегії стає false. Беріть їх у лапки.
  • Коментарі зникають під час конвертації в JSON, бо в JSON немає способу їх подати.

Круговий шлях не гарантований

Конвертація JSON у YAML і назад зазвичай повертає те, з чого ви почали. Конвертація CSV у JSON і назад зазвичай — ні: стиль лапок, порядок стовпців для записів різної форми та подання порожніх значень — це вибір, і різні інструменти роблять його по-різному. Якщо круговий шлях має бути точним, перевірте його, а не припускайте.

Щоб перейти між ними: конвертуйте CSV у JSON, конвертуйте JSON у CSV або конвертуйте JSON у YAML — і перевіряйте результат, бо круговий шлях не завжди точний.