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
- Valitse suunta: "XML → JSON" tai "JSON → XML".
- Liitä data syötekenttään.
- Klikkaa "Muunna".
- 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.