JSON na XML i z powrotem: praktyczny konwerter dla dwóch światów danych
Większość programistów pracuje zarówno z XML, jak i z JSON, czy tego chce, czy nie. Nowoczesne API webowe mówią niemal wyłącznie JSON, ale w momencie gdy trafisz na bank, ubezpieczyciela, endpoint rządowy, korporacyjny ERP lub stary serwis SOAP, XML pojawia się znowu. Konwerter JSON na XML na tej stronie zamienia JSON w XML i XML z powrotem w JSON bezpośrednio w Twojej przeglądarce, więc możesz przechodzić między tymi dwoma formatami bez wklejania wrażliwych ładunków do zdalnej usługi.

Czym tak naprawdę są XML i JSON
XML (Extensible Markup Language) to format znaczników zbudowany wokół zagnieżdżonych znaczników, atrybutów i przestrzeni nazw. Został zaprojektowany do wymiany dokumentów i danych strukturalnych i niesie ze sobą wiele mechanizmów: schematy (XSD), przestrzenie nazw, instrukcje przetwarzania, komentarze, sekcje CDATA i formalną deklarację na początku. Ta bogactwo jest powodem, dla którego XML nadal dominuje w starszych i korporacyjnych systemach. Znajdziesz go w usługach webowych SOAP, kanałach RSS i Atom, plikach konfiguracyjnych (Spring, Maven, konfiguracje aplikacji .NET), formatach dokumentów biurowych i finansowych standardach przesyłania wiadomości, takich jak SWIFT i ISO 20022, gdzie banki i ubezpieczyciele nadal codziennie wymieniają XML.
JSON (JavaScript Object Notation) jest znacznie prostszy: obiekty z parami klucz/wartość, tablice, ciągi znaków, liczby, wartości logiczne i null. Mapuje się niemal jeden do jednego na struktury danych niemal każdego języka programowania, co jest dokładnie powodem, dla którego przejął nowoczesne API webowe, endpointy REST, aplikacje mobilne i pliki konfiguracyjne takie jak package.json. JSON jest typowo o 30 do 50 procent mniejszy niż odpowiednik XML i parsuje się zauważalnie szybciej, częściowo dlatego, że odrzuca zamykające znaczniki i maszynerię atrybutów, która sprawia, że XML jest rozwlekły.
Kluczowe różnice ważne przy konwersji
Oba formaty nakładają się na siebie wystarczająco, żeby można je było odwzorować, ale nie czysto. Kilka różnic strukturalnych powoduje niemal wszystkie tarcia:
- Atrybuty kontra węzły potomne. XML rozróżnia między
<user id="1">(atrybut) a<user><id>1</id></user>(element potomny). JSON nie ma takiego pojęcia, więc konwertery je wymyślają. Zgodnie z konwencją atrybuty są zwijane do klucza takiego jak@attributeslub poprzedzane@, a tekst elementu trafia do klucza takiego jak#text. - Tablice. JSON ma natywne tablice. XML nie. Lista w XML to po prostu ten sam powtarzający się znacznik, jak trzy elementy
<item>z rzędu. Konwertery muszą wnioskować, kiedy powtarzające się rodzeństwo powinno zawinąć się w tablicę JSON, a kiedy pojedynczy element powinien pozostać zwykłym obiektem. - Przestrzenie nazw. XML używa przestrzeni nazw (prefiksów
xmlns:soap), żeby unikać kolizji nazw między schematami. JSON nie ma nic równoważnego, więc prefiksy albo przeżywają jako dosłowne znaki w kluczach, albo są usuwane. - Rozwlekłość i metadane. XML może dołączać metadane do węzła przez atrybuty; JSON wyraża wszystko jako klucze i wartości. To sprawia, że JSON jest bardziej kompaktowy i czytelniejszy, podczas gdy XML zachowuje moc walidacji przez schematy XSD.
Pułapki konwersji, na które warto uważać
Podróż JSON do XML do JSON i oczekiwanie identycznego wyniku to klasyczny błąd. Konwersja jest stratna w obu kierunkach, chyba że kontrolujesz zasady. Pamiętaj o tych kwestiach:
- Atrybuty są zniekształcane. Konwertując JSON na XML, narzędzie potrzebuje reguły, które klucze stają się atrybutami, a które elementami. W drugą stronę atrybuty muszą gdzieś wylądować, a to „gdzieś" (prefiks
@, blok@attributes) różni się między bibliotekami. Jeśli dalszy parser oczekuje innej konwencji, dane wyglądają źle, nawet jeśli nic nie zostało utracone. - Pojedynczy element kontra tablica. Kanał XML z jednym
<item>daje obiekt JSON; ten sam kanał z dwoma elementami daje tablicę JSON. Kod zakładający tablicę psuje się w przypadku jednego elementu. To częste źródło błędów parsowania RSS i SOAP. - Przestrzenie nazw wyciekają lub znikają. W zależności od narzędzia
soap:Bodymoże stać się kluczem dosłownie nazwanymsoap:Body, lub prefiks może być całkowicie usunięty, zmieniając znaczenie dokumentu. - Treść mieszana i typy. XML traktuje wszystko jako tekst, więc wartość taka jak
truelub42może pozostać ciągiem po konwersji do JSON, podczas gdy kierunek odwrotny nie ma natywnego miejsca na komentarze ani CDATA.

Dlaczego konwersja tylko lokalnie ma znaczenie
Ładunki JSON i XML to często najwrażliwsza rzecz, jaką programista obsługuje: odpowiedzi API z tokenami, wiadomości SOAP z numerami kont, pliki konfiguracyjne z danymi uwierzytelniającymi. Konwerter działający w Twojej przeglądarce nigdy nie przesyła żadnego z tych danych. Parsowanie i serializacja odbywają się na Twoim komputerze, nic nie jest wysyłane na serwer i możesz używać narzędzia offline po załadowaniu strony. Do debugowania danych produkcyjnych lub czegokolwiek objętego reżimem zgodności, to różnica między bezpiecznym szybkim sprawdzeniem a przypadkowym wyciekiem danych.
Jeśli potem chcesz posprzątać wynik, połącz to z naszymi innymi konwerterami danych lub uporządkuj wyjście za pomocą formatera JSON przed przekazaniem do kolejnego narzędzia w potoku.
Najczęściej zadawane pytania
Czy konwerter przesyła gdzieś mój JSON lub XML?
Nie. Konwersja JSON na XML i XML na JSON odbywa się w całości w Twojej przeglądarce. Twoje dane nigdy nie opuszczają Twojego urządzenia, a narzędzie działa offline po załadowaniu strony.
Jak atrybuty XML są obsługiwane podczas konwersji na JSON?
Atrybuty XML są umieszczane w dedykowanym kluczu, zazwyczaj poprzedzonym znakiem małpy lub zgrupowanym w bloku atrybutów, ponieważ JSON nie ma natywnego pojęcia atrybutów. Zawartość tekstowa elementu jest przechowywana osobno, żeby obie przeżyły konwersję.
Dlaczego mój pojedynczy element XML stał się obiektem zamiast tablicy?
XML nie ma natywnych tablic, więc lista to po prostu powtarzający się znacznik. Gdy obecny jest tylko jeden element, konwertery nie mogą go odróżnić od zwykłego obiektu, więc staje się obiektem. Dwa lub więcej rodzeństwa o tej samej nazwie znacznika zawija się w tablicę JSON.
Co dzieje się z przestrzeniami nazw XML, takimi jak soap lub xmlns?
JSON nie ma odpowiednika przestrzeni nazw XML. W zależności od konwersji, prefiks jest zachowany jako dosłowny tekst w kluczu lub usunięty. Sprawdź wyjście, jeśli dalszy odbiorca polega na prefiksach przestrzeni nazw.
Czy mogę z powrotem skonwertować JSON na XML i uzyskać oryginalny dokument?
Nie zawsze dokładnie. Konwersja jest stratna w obu kierunkach, bo funkcje XML takie jak komentarze, CDATA i rozróżnienie atrybut kontra element nie mają czystego odpowiednika w JSON. Podróż tam i z powrotem działa najlepiej, gdy kontrolujesz reguły nazewnictwa po obu stronach.
Gdzie XML jest nadal używany w porównaniu do JSON?
XML żyje w starszych i korporacyjnych systemach: usługach webowych SOAP, kanałach RSS i Atom, plikach konfiguracyjnych i finansowych systemach przesyłania wiadomości takich jak SWIFT i ISO 20022. JSON dominuje w nowoczesnych API webowych, endpointach REST i aplikacjach mobilnych.
