Czym jest to narzędzie?
XML i JSON to oba drzewiaste formaty danych, ale pojawiają się w różnych miejscach: starsze API korporacyjne, usługi SOAP, kanały RSS/Atom oraz wiele formatów konfiguracyjnych nadal opierają się na XML, podczas gdy nowoczesne API REST i kod JavaScript posługują się niemal wyłącznie JSON-em. To narzędzie tłumaczy między tymi formatami, dzięki czemu nie musisz ręcznie pisać żadnego z nich przy integracji starych i nowych systemów.
Konwersja opiera się bezpośrednio na wbudowanym w przeglądarkę API DOMParser do odczytu XML i na strukturze zdefiniowanej w specyfikacji W3C XML 1.0 do jego generowania — dzięki temu wygenerowany XML jest poprawnie sformułowany, a przyjmowany XML jest analizowany dokładnie tak, jak zrobiłaby to przeglądarka lub dowolna zgodna ze standardami biblioteka XML.
Ponieważ XML ma pojęcia, których nie ma JSON (atrybuty, mieszana zawartość tekst/element, obowiązkowy pojedynczy element główny), a JSON ma pojęcia, których nie ma XML (natywne tablice, wartości logiczne, liczby), narzędzie stosuje udokumentowaną, powszechnie używaną konwencję: atrybut XML `name="value"` staje się kluczem JSON `"@_name": "value"`, treść tekstowa elementu staje się bezpośrednią wartością tekstową elementu (gdy nie ma on dzieci ani atrybutów) albo kluczem `"#text"` obok atrybutów, a powtarzające się elementy siostrzane o tym samym tagu stają się tablicą JSON.
Dlaczego warto go używać?
- Dwukierunkowość — konwertuj JSON na XML lub XML na JSON z jednego ekranu.
- Poprawna obsługa zagnieżdżeń — zagnieżdżone obiekty JSON stają się zagnieżdżonymi elementami XML i odwrotnie, na dowolnej głębokości.
- Tablice mapowane na powtarzające się elementy — tablica JSON pod jednym kluczem zamienia się w tyle samo elementów siostrzanych XML o tym samym tagu, a powtarzające się tagi XML wracają jako tablica JSON.
- Atrybuty XML są zachowywane — dzięki konwencji `@_nazwaAtrybutu` dane atrybutów nie znikają po cichu.
- Kopiuj do schowka lub pobierz jako plik .json albo .xml.
- 100% po stronie klienta — nic, co wkleisz, nigdzie nie jest wysyłane.
Jak używać
- Wybierz kierunek: „XML → JSON” lub „JSON → XML”.
- Wklej dane do pola wejściowego.
- Kliknij „Konwertuj”.
- Sprawdź wynik, a następnie skopiuj go lub kliknij „Pobierz”, aby zapisać plik.
Przykład
Wejście
{"user":{"name":"Alice","age":30}}Wynik
<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>Alice</name>
<age>30</age>
</user>Jedyny klucz najwyższego poziomu JSON („user”) staje się głównym elementem XML; jeśli JSON ma więcej niż jeden klucz najwyższego poziomu, narzędzie opakowuje całość w element <root>, ponieważ XML wymaga dokładnie jednego elementu głównego.
Praktyczne wskazówki
- Migracja starszej konfiguracji XML (np. pliku ustawień starej aplikacji) do nowoczesnego systemu opartego na JSON: wklej XML, przekonwertuj i w razie potrzeby dostosuj nazwy pól.
- Testowanie endpointu SOAP lub XML-RPC z poziomu JavaScript: przekonwertuj tutaj payload żądania JSON na XML przed wysłaniem, albo przekonwertuj odpowiedź XML z powrotem na JSON, aby łatwo ją przejrzeć.
- Jeśli twój JSON używa tablic dla danych, które w XML byłyby reprezentowane jako powtarzające się elementy, najpierw upewnij się, że tablica jest zagnieżdżona pod pojedynczym kluczem (np. {"items":{"item":[1,2,3]}}), a nie jako goła tablica najwyższego poziomu, ponieważ XML nie może mieć wielu elementów głównych.
Dlaczego konwencja atrybutu @_ ma znaczenie
Najtrudniejszą częścią konwersji JSON/XML jest to, że elementy XML mogą jednocześnie nieść dwa rodzaje danych — atrybuty i zawartość potomną — podczas gdy zwykły obiekt JSON ma tylko klucze i wartości. Bez konwencji rozdzielającej te dwa elementy naiwny konwerter albo całkowicie traciłby atrybuty, albo mieszałby je z elementami potomnymi w sposób, którego nie da się wiarygodnie odtworzyć. Konwencja przedrostka `@_nazwa` (stosowana także przez powszechnie używane biblioteki w ekosystemie JavaScript) rozwiązuje ten problem, nadając atrybutom odrębny, jednoznaczny kształt klucza, dzięki czemu `<product id="42">Widget</product>` konwertuje się bezstratnie w obie strony jako `{"product":{"@_id":"42","#text":"Widget"}}`, bez utraty id ani błędnego zgadywania, która wartość czym jest.
Najczęściej zadawane pytania
Co się dzieje z JSON-em mającym więcej niż jeden klucz najwyższego poziomu?
XML wymaga pojedynczego elementu głównego, więc jeśli twój obiekt JSON ma wiele kluczy najwyższego poziomu (np. {"a":1,"b":2}), wynik zostaje opakowany w element <root>: <root><a>1</a><b>2</b></root>. Jeśli JSON ma dokładnie jeden klucz najwyższego poziomu, ten klucz staje się bezpośrednio nazwą elementu głównego.
Jak atrybuty XML są reprezentowane w JSON?
Atrybut taki jak <user id="7"> staje się kluczem "@_id": "7" w wynikowym obiekcie JSON. To powszechna, udokumentowana konwencja (stosowana przez biblioteki takie jak fast-xml-parser), która pozwala odróżnić atrybuty od elementów potomnych.
Czy powtarzające się elementy XML stają się tablicą JSON?
Tak. Jeśli element ma wiele dzieci o tej samej nazwie tagu, np. <items><item>1</item><item>2</item></items>, konwersja do JSON daje {"items":{"item":["1","2"]}}. Konwersja tego JSON-a z powrotem do XML odtwarza powtarzające się elementy <item>.
Czy liczby i wartości logiczne są zachowywane przy konwersji z XML do JSON?
XML nie ma natywnego pojęcia liczb ani wartości logicznych — wszystko jest tekstem — więc zawartość tekstowa trafia do JSON jako ciąg znaków (np. "30" zamiast 30). Jeśli potrzebujesz typów liczbowych, będziesz musiał przekonwertować te pola już po fakcie.
Czy moje dane są gdziekolwiek przesyłane?
Nie. Parsowanie i konwersja odbywają się całkowicie w JavaScripcie w twojej przeglądarce, przy użyciu wbudowanego API DOMParser — nic nie jest wysyłane na serwer, więc można bezpiecznie używać tego narzędzia z prywatnymi plikami konfiguracyjnymi lub wewnętrznymi danymi API.