CodeKitHub
JSON-työkalut

JSON ↔ XML-muunnin

Viimeksi päivitetty:

Kun JSON muunnetaan XML:ksi, jokaisesta avaimesta tulee elementin tagi ja jokaisesta arvosta sen tekstisisältö — sisäkkäisistä objekteista tulee sisäkkäisiä elementtejä, taulukoista toistuvia sisarelementtejä, ja XML-attribuutit kuvautuvat JSON:ssa `@_nimi`-avaimiksi, jotta muunnos säilyy häviöttömänä molempiin suuntiin. Tämä työkalu tekee muunnoksen kumpaankin suuntaan, kokonaan selaimessasi.

Mikä tämä työkalu on?

XML ja JSON ovat molemmat puumaisia tietomuotoja, mutta niitä käytetään eri paikoissa: vanhat yritys-API:t, SOAP-palvelut, RSS/Atom-syötteet ja monet asetustiedostot käyttävät yhä XML:ää, kun taas modernit REST-API:t ja JavaScript-koodi puhuvat lähes yksinomaan JSON:ia. Tämä työkalu kääntää näiden välillä, jottei sinun tarvitse kirjoittaa kumpaakaan käsin yhdistäessäsi vanhoja ja uusia järjestelmiä.

Muunnos perustuu suoraan selaimen DOMParser-rajapintaan XML:n lukemisessa ja noudattaa W3C:n XML 1.0 -määritystä tuloksen tuottamisessa — joten syntyvä XML on hyvin muodostettu ja sen hyväksymä XML jäsennetään samalla tavalla kuin selain tai mikä tahansa standardinmukainen XML-kirjasto sen jäsentäisi.

Koska XML:ssä on käsitteitä, joita JSON:ssa ei ole (attribuutit, sekoitettu teksti- ja elementtisisältö, pakollinen yksi juurielementti) ja JSON:ssa on käsitteitä, joita XML:ssä ei ole (natiivit taulukot, totuusarvot, numerot), työkalu käyttää dokumentoitua ja laajalti käytettyä käytäntöä: XML-attribuutti `nimi="arvo"` muuttuu JSON-avaimeksi `"@_nimi": "arvo"`, elementin tekstisisällöstä tulee joko elementin suora merkkijonoarvo (kun sillä ei ole lapsia tai attribuutteja) tai `"#text"`-avain attribuuttien rinnalle, ja saman tagin toistuvista sisarelementeistä tulee JSON-taulukko.

Miksi käyttää sitä?

  • Kaksisuuntainen — muunna JSON XML:ksi tai XML JSON:ksi samalla näytöllä.
  • Käsittelee sisäkkäisyyden oikein — sisäkkäisistä JSON-objekteista tulee sisäkkäisiä XML-elementtejä ja päinvastoin, missä tahansa syvyydessä.
  • Taulukot kuvautuvat toistuviksi elementeiksi — avaimen alla oleva JSON-taulukko muuttuu vastaavaksi määräksi samannimisiä sisar-XML-elementtejä, ja toistuvat XML-tagit palautuvat JSON-taulukoksi.
  • XML-attribuutit säilyvät — `@_attribuuttinimi`-käytännöllä, jotta attribuuttidata ei katoa huomaamatta.
  • Kopioi leikepöydälle tai lataa .json- tai .xml-tiedostona.
  • 100 % selaimessa toimiva — mitään liittämääsi ei lähetetä minnekään.

Käyttöohje

  1. Valitse suunta: "XML → JSON" tai "JSON → XML".
  2. Liitä data syötekenttään.
  3. Klikkaa "Muunna".
  4. Tarkista tulos ja kopioi se tai lataa tiedosto "Lataa"-painikkeella.

Esimerkki

Syöte

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

Tuloste

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

JSON:n ainoasta ylätason avaimesta ("user") tulee XML:n juurielementti; jos JSON:ssa on useampi ylätason avain, työkalu kääri kaiken <root>-elementtiin, koska XML vaatii täsmälleen yhden juurielementin.

Käytännön vinkkejä

  • Vanhan XML-asetustiedoston (kuten vanhan sovelluksen asetustiedoston) siirtäminen moderniin JSON-pohjaiseen järjestelmään: liitä XML, muunna ja säädä kenttänimet tarpeen mukaan.
  • SOAP- tai XML-RPC-päätepisteen testaus JavaScriptistä: muunna JSON-pyyntösi XML:ksi täällä ennen lähetystä, tai muunna XML-vastaus takaisin JSON:ksi tarkastelun helpottamiseksi.
  • Jos JSON:ssasi käytetään taulukoita datalle, jonka XML esittäisi toistuvina elementteinä, varmista että taulukko on ensin sisäkkäin yhden avaimen alla (esim. {"items":{"item":[1,2,3]}}) eikä paljaana ylätason taulukkona, koska XML:ssä ei voi olla useita juurielementtejä.

Miksi @_-attribuuttikäytäntö on tärkeä

JSON/XML-muunnoksen hankalin osa on se, että XML-elementit voivat kantaa kahdenlaista dataa samanaikaisesti — attribuutteja ja lapsisisältöä — kun taas tavallisessa JSON-objektissa on vain avaimia ja arvoja. Ilman käytäntöä, joka pitää nämä erillään, naiivi muunnin joko hukkaisi attribuutit kokonaan tai sekoittaisi ne lapsielementteihin tavalla, jota ei voi luotettavasti muuntaa takaisin. `@_nimi`-etuliitekäytäntö (jota käyttävät myös laajasti hyväksytyt JavaScript-ekosysteemin kirjastot) ratkaisee tämän antamalla attribuuteille selkeän, yksiselitteisen avainmuodon, jolloin `<product id="42">Widget</product>` muuntuu edestakaisin siististi muotoon `{"product":{"@_id":"42","#text":"Widget"}}` sen sijaan, että id katoaisi tai arvoja arvattaisiin väärin.

Usein kysytyt kysymykset

Mitä tapahtuu, jos JSON:ssa on useampi kuin yksi ylätason avain?

XML vaatii yhden juurielementin, joten jos JSON-objektissasi on useita ylätason avaimia (esim. {"a":1,"b":2}), tulos kääritään <root>-elementtiin: <root><a>1</a><b>2</b></root>. Jos JSON:ssa on täsmälleen yksi ylätason avain, siitä tulee suoraan juurielementin nimi.

Miten XML-attribuutit esitetään JSON:ssa?

Attribuutista <user id="7"> tulee syntyvässä JSON-objektissa avain "@_id": "7". Tämä on yleinen, dokumentoitu käytäntö (jota käyttävät esimerkiksi fast-xml-parserin kaltaiset kirjastot), joka pitää attribuutit erillään lapsielementeistä.

Muuttuvatko toistuvat XML-elementit JSON-taulukoksi?

Kyllä. Jos elementillä on useita samannimisiä lapsia, esim. <items><item>1</item><item>2</item></items>, JSON-muunnos tuottaa {"items":{"item":["1","2"]}}. Kyseisen JSON:n muuntaminen takaisin XML:ksi tuottaa toistuvat <item>-elementit uudelleen.

Säilyvätkö numerot ja totuusarvot XML:stä JSON:ksi muunnettaessa?

XML:ssä ei ole natiivia numero- tai totuusarvokäsitettä — kaikki on tekstiä — joten tekstisisältö tulee JSON-merkkijonona (esim. "30" eikä 30). Jos tarvitset numeerisia tyyppejä, ne pitää muuntaa erikseen jälkikäteen.

Lähetetäänkö dataani minnekään?

Ei. Jäsennys ja muunnos tapahtuvat kokonaan JavaScriptillä selaimessasi, käyttäen selaimen sisäänrakennettua DOMParser-rajapintaa — mitään ei lähetetä palvelimelle, joten työkalu on turvallinen myös yksityisten asetustiedostojen tai sisäisten API-kutsujen kanssa.

Liittyvät työkalut