Granice konwersji JSON ↔ YAML i XML
Twierdzenie, że JSON jest podzbiorem YAML, gwarantuje tylko jeden kierunek, a XML nie ma żadnego oficjalnego odwzorowania na JSON — wszystko opiera się na konwencji.
Konwersja między JSON a YAML, XML, CSV, TypeScript, Java, Go i SQL nigdy nie jest bezstratna. Istotne jest to, by jasno określić, gdzie następuje strata.
Liczba artykułów: 8Twierdzenie, że JSON jest podzbiorem YAML, gwarantuje tylko jeden kierunek, a XML nie ma żadnego oficjalnego odwzorowania na JSON — wszystko opiera się na konwencji.
CSV jest dwuwymiarowy, JSON ma kształt drzewa. Trudna część konwersji to nie kod, ale ustalenie z góry, jak spłaszczać tablice i jak zachować typy.
Zagnieżdżone struktury, niespójne pola i tablice tablic to miejsca, w których konwersja JSON-a do arkusza się łamie. Cztery podejścia uporządkowane według czasu do wyniku, każde z kompromisami.
Zamiana JSON-a w SQL INSERT ukrywa podział na tabele zagnieżdżone, NULL a brak pola, ucieczkę i różnice dialektów. Wykonywalne instrukcje i tabele porównawcze dla każdej pułapki.
Wygenerowanie interfejsu z przykładowego JSON-a to połowa pracy: pola opcjonalne, null, unie, daty i duże liczby całkowite wymagają ręcznego przejścia, a typy nie walidują w czasie wykonania.
Najczęściej kopiowana w poradnikach komenda yq -P input.json > output.yaml wciąż produkuje JSON. W artykule yq v4.44.6, PyYAML 6.0.3 i js-yaml przetestowano na próbce 2.39 MB, wyjaśniono, dlaczego format wyjścia zależy od rozszerzenia wejścia, i podano poprawne sposoby konwersji wsadowej, cudzysłowów, wcięć oraz precyzji dużych liczb całkowitych.
Dziewięć eksperymentów na prawdziwym konwerterze: strategia „klucze z pierwszego wiersza" cicho gubi pola, null, brak i pusty string stają się wszystkim pustymi komórkami, liczba całkowita o 20 cyfrach traci precyzję już w JSON.parse, a kropka w kluczu sprawia, że dwa różne ścieżki kolidują w tej samej kolumnie. Jak powstaje nagłówek, które wartości się deformują i jak wybrać strategię według odbiorcy danych.
Praktyczne spojrzenie na to, co generator JSON-to-Java naprawdę emituje — liczby stają się Double, zagnieżdżone obiekty statycznymi klasami wewnętrznymi, a nie powstaje ani jedna adnotacja Jacksona. Precyzja pieniędzy, zmiana nazw pól, wymazywanie typów, nieznane pola i daty to pięć rzeczy, które musisz uzupełnić sam, każda z kodem gotowym do wklejenia.