CodeKitHub
Nástroje JSON

Převodník JSON ↔ XML

Naposledy aktualizováno:

Při převodu JSON na XML se každý klíč stane elementovou značkou a každá hodnota jejím textovým obsahem — vnořené objekty se stanou vnořenými elementy, pole se stanou opakovanými sourozeneckými elementy a atributy XML se mapují na klíče `@_name` v JSONu, aby zůstal obousměrný převod bezztrátový. Tento nástroj dělá tento převod, oběma směry, zcela ve vašem prohlížeči.

Co je tento nástroj?

XML i JSON jsou stromové datové formáty, ale objevují se na různých místech: starší podnikové API, SOAP služby, RSS/Atom feedy a mnoho konfiguračních formátů stále mluví XML, zatímco moderní REST API a JavaScript kód mluví téměř výhradně JSON. Tento nástroj mezi nimi překládá, abyste nemuseli ručně psát ani jeden z nich při integraci starých a nových systémů.

Převod je postaven přímo na API DOMParser prohlížeče pro čtení XML a při jeho generování dodržuje strukturu definovanou specifikací W3C XML 1.0 — takže XML, které generuje, je dobře formované a XML, které přijímá, se zpracovává stejným způsobem, jako by ho zpracoval prohlížeč nebo jakákoli standardům vyhovující knihovna XML.

Protože XML má koncepty, které JSON nemá (atributy, smíšený text/elementový obsah, povinný jediný kořenový element), a JSON má koncepty, které XML nemá (nativní pole, booleany, čísla), nástroj používá zdokumentovanou, široce používanou konvenci: atribut XML `name="value"` se stane klíčem JSON `"@_name": "value"`, textový obsah elementu se stane buď přímou řetězcovou hodnotou elementu (když nemá žádné potomky ani atributy), nebo klíčem `"#text"` vedle jakýchkoli atributů, a opakované sourozenecké elementy se stejnou značkou se stanou polem JSON.

Proč ho používat?

  • Obousměrný — převádějte JSON na XML nebo XML na JSON na jedné obrazovce.
  • Správně zpracovává vnoření — vnořené objekty JSON se stanou vnořenými elementy XML a naopak, v jakékoli hloubce.
  • Pole se mapují na opakované elementy — pole JSON pod klíčem se stane odpovídajícím počtem sourozeneckých elementů XML se stejnou značkou, a opakované značky XML se vrátí jako pole JSON.
  • Atributy XML se zachovávají — pomocí konvence `@_attributeName`, takže se data atributů tiše neztratí.
  • Kopírování do schránky nebo stažení jako soubor .json nebo .xml.
  • 100% zpracování na straně klienta — nic, co vložíte, se nikam nenahrává.

Jak se používá

  1. Vyberte směr: "XML → JSON" nebo "JSON → XML".
  2. Vložte svá data do vstupního pole.
  3. Klikněte na "Convert".
  4. Zkontrolujte výsledek, poté ho zkopírujte, nebo klikněte na "Download" pro uložení souboru.

Příklad

Vstup

{"user":{"name":"Alice","age":30}}

Výstup

<?xml version="1.0" encoding="UTF-8"?>
<user>
  <name>Alice</name>
  <age>30</age>
</user>

Jediný klíč na nejvyšší úrovni JSONu ("user") se stane kořenovým elementem XML; pokud má JSON víc klíčů na nejvyšší úrovni, nástroj vše obalí do elementu <root>, protože XML vyžaduje přesně jeden kořen.

Praktické tipy

  • Migrace staré konfigurace XML (jako soubor nastavení staré aplikace) na moderní systém založený na JSON: vložte XML, převeďte a podle potřeby upravte názvy polí.
  • Testování koncového bodu SOAP nebo XML-RPC z JavaScriptu: nejdřív sem převeďte svůj payload požadavku JSON na XML před odesláním, nebo převeďte odpověď XML zpět na JSON pro snadnou kontrolu.
  • Pokud váš JSON používá pole pro data, která by XML reprezentovalo jako opakované elementy, ujistěte se, že je pole nejdřív vnořené pod jedním klíčem (např. {"items":{"item":[1,2,3]}}) místo holého pole na nejvyšší úrovni, protože XML nemůže mít víc kořenových elementů.

Proč záleží na konvenci atributu @_

Nejchoulostivější částí převodu JSON/XML je, že elementy XML mohou nést dva druhy dat najednou — atributy a podřízený obsah — zatímco obyčejný objekt JSON má jen klíče a hodnoty. Bez konvence, která by je udržela oddělené, by naivní převodník buď atributy zcela ztratil, nebo je smíchal s podřízenými elementy způsobem, který nelze spolehlivě převést zpět. Konvence prefixu `@_name` (používaná i široce rozšířenými knihovnami v ekosystému JavaScriptu) to řeší tím, že dá atributům odlišný, jednoznačný tvar klíče, takže `<product id="42">Widget</product>` se obousměrně čistě převede jako `{"product":{"@_id":"42","#text":"Widget"}}` místo ztráty id nebo nesprávného odhadování, která hodnota je která.

Časté dotazy

Co se stane s JSONem s víc než jedním klíčem na nejvyšší úrovni?

XML vyžaduje jediný kořenový element, takže pokud má váš objekt JSON víc klíčů na nejvyšší úrovni (např. {"a":1,"b":2}), výstup se obalí do elementu <root>: <root><a>1</a><b>2</b></root>. Pokud má váš JSON přesně jeden klíč na nejvyšší úrovni, stane se tento klíč přímo názvem kořenového elementu.

Jak se atributy XML reprezentují v JSONu?

Atribut jako <user id="7"> se stane klíčem "@_id": "7" ve výsledném objektu JSON. Jde o běžnou, zdokumentovanou konvenci (používanou knihovnami jako fast-xml-parser), která udržuje atributy rozlišitelné od podřízených elementů.

Stanou se opakované elementy XML polem JSON?

Ano. Pokud má element víc podřízených prvků se stejným názvem značky, např. <items><item>1</item><item>2</item></items>, převod na JSON vytvoří {"items":{"item":["1","2"]}}. Převod tohoto JSONu zpět na XML znovu vytvoří opakované elementy <item>.

Zachovávají se čísla a booleany při převodu XML na JSON?

XML nemá nativní koncept čísel ani booleanů — vše je text — takže textový obsah přejde jako řetězec JSON (např. "30" místo 30). Pokud potřebujete číselné typy, budete tato pole muset dodatečně převést.

Nahrávají se moje data někam?

Ne. Zpracování a převod probíhá zcela v JavaScriptu ve vašem prohlížeči, pomocí vestavěného API DOMParser — nic se neposílá na server, takže je bezpečné to používat i se soukromými konfiguračními soubory nebo interními payloady API.

Související nástroje