Czym jest konwersja XML ↔ JSON?
XML (Extensible Markup Language) to oparty na tagach format tekstowy dla danych hierarchicznych. Spotkasz go w usługach sieciowych SOAP, kanałach RSS i Atom, dokumentach zdrowotnych HL7 FHIR, plikach sitemap.xml i plikach konfiguracyjnych dostarczanych z Maven, Spring i Android Gradle. JSON (JavaScript Object Notation, zdefiniowany przez RFC 8259) opisuje ten sam rodzaj zagnieżdżonych danych, ale z nawiasami klamrowymi i tablicami zamiast tagów otwierających i zamykających. JSON jest tym, czym mówi prawie każde REST API dzisiaj i to natywny kształt wartości każdego runtime przeglądarki. Konwersja między tymi dwoma formatami jest jednym z tych zadań, które brzmią trywialnie dopóki nie trafisz na atrybuty, zawartość mieszaną, powtarzające się dzieci i CDATA. Własne wyrażenie regularne to zła odpowiedź; prawdziwy parser to właściwa. To narzędzie dostarcza prawdziwy parser (fast-xml-parser) i uruchamia go w przeglądarce, więc możesz wkleić kopertę XML zwróconą przez starszą usługę SOAP i zobaczyć ją jako obiekt JSON, który możesz upuścić prosto do sklepu Redux, lub wziąć payload JSON złożony w kliencie REST i zamienić go z powrotem w kształt XML jakiego oczekuje korporacyjny endpoint.
Jak działa mapowanie XML ↔ JSON?
Każda konwersja działa lokalnie w przeglądarce używając dołączonej biblioteki fast-xml-parser (MIT, wersja 4.x). Reguły mapowania wysokiego poziomu:
- Element do klucza: każda nazwa elementu XML staje się kluczem obiektu JSON.
<user><name>Alice</name></user>mapuje się do{"user":{"name":"Alice"}}. - Atrybut do klucza z prefiksem: atrybut jest przechowywany pod kluczem sformowanym przez dodanie wybranego prefiksu. Z prefiksem
@,<user id="1">produkuje{"user":{"@id":"1"}}. - Zawartość tekstowa do klucza węzła tekstowego: gdy element ma zarówno atrybuty jak i tekst, tekst ląduje pod wybranym kluczem węzła tekstowego.
<price currency="USD">9.99</price>z kluczem#textprodukuje{"price":{"@currency":"USD","#text":"9.99"}}. - Powtarzające się dzieci do tablicy: gdy Wymuś tablicę dla powtarzających się tagów potomnych jest włączone, wiele sibling elementów o tej samej nazwie zwija się do tablicy JSON.
<items><item>A</item><item>B</item></items>staje się{"items":{"item":["A","B"]}}. - Sekcje CDATA: surowy tekst wewnątrz
<![CDATA[…]]>jest zachowywany pod kluczem#cdata, więc nawiasy kątowe i ampersandy nie są re-escapowane podczas round-tripu. - JSON do XML odwraca mapowanie: klucze obiektów stają się elementami, klucze z prefiksem stają się atrybutami, a tablice rozwijają się w powtarzające się sibling elementy.
Dlaczego konwertować XML i JSON tym narzędziem?
- Twoje dane pozostają na Twoim komputerze. Każde parsowanie i każde budowanie działa w kontekście JavaScript tej strony. Pakiety pacjentów FHIR, koperty uwierzytelniające SOAP, własnościowe pliki konfiguracyjne, eksporty rozliczeniowe — żadne z nich nie dotyka naszych serwerów, bo w ścieżce kodu nie ma kroku wysyłania. Otwórz panel sieci i obserwuj.
- Starszy SOAP w front-endzie REST-first to najczęstsze pytanie jakie słyszymy. Bank lub ubezpieczyciel ma endpoint SOAP, który nie będzie wycofany przez lata; aplikacja React lub Vue do niego wywołująca nie chce uczyć się XML. Wklej kopertę, uzyskaj JSON z prefiksowanymi atrybutami i zachowanymi przestrzeniami nazw, upuść zawartość
Bodydo swojego store'a stanów. - Konsumenci RSS, Atom i sitemap też korzystają. Katalog podcastów, agregator wiadomości lub wewnętrzny dashboard przyjmujący
sitemap.xmlmoże całkowicie pominąć pisanie parsera XML. Skonwertuj feed raz, pracuj z tablicą JSON, a kod klienta pozostaje w języku, który już mówi. - Eksport konfiguracji uzupełnia listę. Maven, Spring, Android Gradle i staromodne builde Ant emitują XML; natywne narzędzie chmurowe po drugiej stronie (Terraform, Ansible, GitHub Actions, cloud-init) czyta JSON lub YAML. Konwertuj w przeglądarce zamiast uruchamiać skrypt Pythona z zależnością firmy trzeciej — szczególnie przydatne w środowiskach air-gapped gdzie wklejanie do nieznanej usługi webowej jest wykluczone.
Jakie są typowe zastosowania konwersji XML ↔ JSON?
Łączenie XML i JSON pojawia się w inżynierii integracji, narzędziach API i inżynierii danych. Kilka wzorców dominuje w obciążeniu pracy:
- Mostkowanie SOAP do REST: wyciąganie payloadu
Bodyz koperty SOAP zwróconej przez starsze API bankowe lub ubezpieczeniowe i konwertowanie go do JSON, by front-end React lub Vue mógł go konsumować bez warstwy proxy po stronie serwera. - Dokumenty zdrowotne FHIR: konwertowanie pakietów XML HL7 FHIR (format wymagany przez HHS/ONC i NHS Digital do wymiany danych klinicznych) do JSON do ładowania do kolekcji MongoDB Atlas lub kolumny PostgreSQL JSONB gdzie analitycy mogą je zapytywać.
- Przetwarzanie sitemap i kanałów: zamiana
sitemap.xmllub kanału RSS/Atom w tablicę JSON, by własny indekser, bot Slack lub widget dashboardu mógł iterować po wpisach bez ściągania parsera XML jako zależności.
Jak wygląda round-trip XML ↔ JSON?
Weź mały przykład. Wklej <user id="1"><name>Alice</name></user> do wejścia, ustaw prefiks atrybutu na @, pozostaw tryb na XML do JSON i naciśnij Konwertuj. Wyjście to {"user":{"@id":"1","name":"Alice"}}. Przełącz tryb na JSON do XML, wklej ten JSON z powrotem, ustaw wcięcie na 2 spacje i naciśnij Konwertuj ponownie. Otrzymasz <user id="1">\n <name>Alice</name>\n</user>, strukturalnie identyczne z oryginałem. Jedyną rzeczą nie gwarantowaną przez round-trip jest kolejność atrybutów, bo klucze obiektów JSON są nieuporządkowane według specyfikacji.
Ten konwerter XML ↔ JSON dostarcza fast-xml-parser@4 dołączonego w tym samym origin, obsługuje atrybuty, CDATA, powtarzające się tagi potomne i prefiksy przestrzeni nazw, i działa offline po załadowaniu strony. Żadnego kroku wysyłania, żadnego proxy CDN, żadnego beacona analitycznego, żadnej telemetrii żadnego rodzaju. Każdy bajt wejścia i wyjścia pozostaje w przeglądarce, co jest dokładnie tym czego chcesz gdy payload jest pakietem pacjentów FHIR, kopertą uwierzytelniającą SOAP lub innym kształtem danych, którego nikt poza Twoim zespołem nigdy nie powinien zobaczyć.