Межі конвертації JSON ↔ YAML та XML
Твердження, що JSON є підмножиною YAML, гарантує лише один напрямок, а в XML офіційного відображення JSON немає взагалі — усе тримається на конвенції.
Перетворення JSON на YAML, XML, CSV, TypeScript, Java, Go і SQL і навпаки ніколи не буває без втрат. Важливо чітко розуміти, де саме виникають втрати.
Статей: 8Твердження, що JSON є підмножиною YAML, гарантує лише один напрямок, а в XML офіційного відображення JSON немає взагалі — усе тримається на конвенції.
CSV двовимірний, JSON деревоподібний. Складна частина конвертації — не код, а рішення заздалегідь, як розгортати масиви та як зберігати типи.
Вкладені структури, неузгоджені поля та масиви масивів — ось де ламається конвертація JSON у таблицю. Чотири підходи за часом до результату, кожен із компромісами.
Перетворення JSON на SQL INSERT приховує поділ вкладених таблиць, NULL проти відсутності, екранування та прогалини між діалектами. Виконувані інструкції й порівняльні таблиці для кожної пастки.
Генерація інтерфейсу зі зразка JSON — це половина роботи: необов'язкові поля, null, об'єднання, дати й великі цілі числа потребують людського проходу, а типи не дають перевірки під час виконання.
Найчастіше копійована в підручниках команда yq -P input.json > output.yaml насправді все ще видає JSON. У статті yq v4.44.6, PyYAML 6.0.3 і js-yaml прогнані на зразку 2.39 MB, пояснюється, чому формат виводу визначає розширення вхідного файла, і даються правильні рецепти для пакетної конвертації, лапок, відступів і точності великих цілих чисел.
Дев'ять експериментів на справжньому конвертері: стратегія «ключів першого рядка» мовчки втрачає поля, null, відсутність і порожній рядок стають порожніми клітинками, 20-значне число втрачає точність уже на JSON.parse, а крапка в ключі зіштовхує два різні шляхи в одну колонку. Як формується заголовок, які значення змінюються і як обирати стратегію за призначенням.
Практичний вимір того, що насправді видає генератор JSON → Java——числа стають Double, вкладені об'єкти — статичними внутрішніми класами, а жодної анотації Jackson не з'являється. Точність грошей, перейменування полів, стирання узагальнень, невідомі поля та дати — п'ять речей, які доведеться додати власноруч, з кодом, який можна скопіювати.