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 — і перевіряйте результат, бо круговий шлях не завжди точний.