CodeKitHub
Nástroje JSON

Konvertor JSON ↔ XML

Naposledy aktualizované:

Pri konverzii JSON na XML sa každý kľúč stane elementovou značkou a každá hodnota sa stane jej textovým obsahom — vnorené objekty sa stanú vnorenými elementmi, polia sa stanú opakovanými súrodeneckými elementmi, a XML atribúty sa mapujú na kľúče `@_name` v JSON, aby obojsmerná konverzia zostala bezstratová. Tento nástroj vykonáva túto konverziu, v oboch smeroch, úplne vo vašom prehliadači.

Čo je tento nástroj?

XML a JSON sú oba stromovo štruktúrované dátové formáty, no objavujú sa na rôznych miestach: staršie enterprise API, SOAP služby, RSS/Atom kanály a mnohé konfiguračné formáty stále používajú XML, zatiaľ čo moderné REST API a JavaScript kód takmer výhradne používajú JSON. Tento nástroj prekladá medzi nimi, aby ste nemuseli ručne písať ani jeden z nich pri integrácii starých a nových systémov.

Konverzia je postavená priamo na API DOMParser prehliadača na čítanie XML, a sleduje štruktúru definovanú W3C XML 1.0 špecifikáciou pri jej produkovaní — takže XML, ktoré generuje, je dobre sformované a XML, ktoré prijíma, je parsované rovnako ako by ho parsoval prehliadač alebo akákoľvek štandardom vyhovujúca XML knižnica.

Keďže XML má koncepty, ktoré JSON nemá (atribúty, zmiešaný text/elementový obsah, povinný jediný koreňový element) a JSON má koncepty, ktoré XML nemá (natívne polia, boolean, čísla), nástroj používa zdokumentovanú, široko používanú konvenciu: XML atribút `name="value"` sa stane JSON kľúčom `"@_name": "value"`, textový obsah elementu sa stane buď priamou reťazcovou hodnotou elementu (keď nemá deti ani atribúty), alebo kľúčom `"#text"` popri akýchkoľvek atribútoch, a opakované súrodenecké elementy s rovnakou značkou sa stanú JSON poľom.

Prečo ho používať?

  • Obojsmerný — prekonvertujte JSON na XML alebo XML na JSON z tej istej obrazovky.
  • Správne zvláda vnorenie — vnorené JSON objekty sa stanú vnorenými XML elementmi a naopak, na akejkoľvek hĺbke.
  • Polia sa mapujú na opakované elementy — JSON pole pod kľúčom sa stane toľkými súrodeneckými XML elementmi s rovnakou značkou, a opakované XML značky sa vrátia ako JSON pole.
  • XML atribúty sú zachované — pomocou konvencie `@_attributeName`, takže dáta atribútov nie sú ticho zahodené.
  • Skopírovanie do schránky alebo stiahnutie ako .json alebo .xml súbor.
  • 100% na strane klienta — nič z toho, čo vložíte, sa nikam nenahráva.

Ako sa používa

  1. Vyberte smer: "XML → JSON" alebo "JSON → XML".
  2. Vložte svoje dáta do vstupného poľa.
  3. Kliknite na "Convert".
  4. Skontrolujte výsledok, potom ho skopírujte alebo kliknite na "Download" pre uloženie súboru.

Prí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ý kľúč najvyššej úrovne JSON ("user") sa stane koreňovým elementom XML; ak má JSON viac než jeden kľúč najvyššej úrovne, nástroj obalí všetko do elementu <root>, keďže XML vyžaduje presne jeden koreň.

Praktické tipy

  • Migrácia staršej XML konfigurácie (ako súbor nastavení starej aplikácie) na moderný systém založený na JSON: vložte XML, prekonvertujte a upravte názvy polí podľa potreby.
  • Testovanie SOAP alebo XML-RPC endpointu z JavaScriptu: prekonvertujte svoj JSON požiadavkový payload na XML tu pred odoslaním, alebo prekonvertujte XML odpoveď späť na JSON kvôli jednoduchšej kontrole.
  • Ak váš JSON používa polia pre dáta, ktoré by XML reprezentoval ako opakované elementy, uistite sa, že je pole najprv vnorené pod jediný kľúč (napr. {"items":{"item":[1,2,3]}}), namiesto holého poľa najvyššej úrovne, keďže XML nemôže mať viacero koreňových elementov.

Prečo záleží na konvencii atribútu @_

Najzložitejšia časť konverzie JSON/XML je, že XML elementy môžu niesť dva druhy dát naraz — atribúty a podradený obsah — zatiaľ čo obyčajný JSON objekt má len kľúče a hodnoty. Bez konvencie na ich oddelenie by naivný konvertor buď úplne stratil atribúty, alebo by ich zmiešal s podradenými elementmi spôsobom, ktorý sa nedá spoľahlivo skonvertovať späť. Konvencia prefixu `@_name` (tiež používaná v širokoprijímaných knižniciach v ekosystéme JavaScript) rieši toto tým, že dáva atribútom odlišný, jednoznačný tvar kľúča, takže `<product id="42">Widget</product>` sa čisto prevedie tam a späť ako `{"product":{"@_id":"42","#text":"Widget"}}` namiesto straty id alebo nesprávneho hádania, ktorá hodnota bola ktorá.

Časté otázky

Čo sa stane s JSON, ktorý má viac než jeden kľúč najvyššej úrovne?

XML vyžaduje jediný koreňový element, takže ak má váš JSON objekt viacero kľúčov najvyššej úrovne (napr. {"a":1,"b":2}), výstup je obalený do elementu <root>: <root><a>1</a><b>2</b></root>. Ak má váš JSON presne jeden kľúč najvyššej úrovne, tento kľúč sa stane priamo názvom koreňového elementu.

Ako sú reprezentované XML atribúty v JSON?

Atribút ako <user id="7"> sa stane kľúčom "@_id": "7" vo výslednom JSON objekte. Toto je bežná, zdokumentovaná konvencia (používaná knižnicami ako fast-xml-parser), ktorá udržuje atribúty rozlíšiteľné od podradených elementov.

Stanú sa opakované XML elementy JSON poľom?

Áno. Ak má element viacero detí s rovnakým názvom značky, napr. <items><item>1</item><item>2</item></items>, konverzia na JSON vytvorí {"items":{"item":["1","2"]}}. Konverzia tohto JSON späť na XML reprodukuje opakované elementy <item>.

Sú čísla a boolean zachované pri konverzii XML na JSON?

XML nemá natívny koncept čísel ani boolean — všetko je text — takže textový obsah prichádza ako JSON reťazec (napr. "30" namiesto 30). Ak potrebujete číselné typy, budete musieť tieto polia následne skonvertovať.

Nahrávajú sa moje dáta niekam?

Nie. Parsovanie a konverzia prebieha úplne v JavaScripte vo vašom prehliadači, pomocou zabudovaného API DOMParser — nič sa neposiela na server, takže je bezpečné použiť to so súkromnými konfiguračnými súbormi alebo internými API payloadmi.

Súvisiace nástroje