JSON XML:ksi ja takaisin: käytännöllinen muunnin kahdelle datamaailmalle
Useimmat kehittäjät työskentelevät sekä XML:n että JSON:n kanssa, halusivatpa he tai eivät. Modernit verkkorajapinnat puhuvat lähes yksinomaan JSON:ia, mutta heti kun kosketat pankkia, vakuutusyhtiötä, valtion päätepistettä, yrityksen ERP-järjestelmää tai vanhaa SOAP-palvelua, XML ilmestyy taas. Tämän sivun JSON XML:ksi -muunnin muuttaa JSON:in XML:ksi ja XML:n takaisin JSON:ksi suoraan selaimessasi, joten voit liikkua näiden kahden muodon välillä kopioimatta arkaluontoisia hyötykuormia etäpalveluun.

Mitä XML ja JSON oikeasti ovat
XML (Extensible Markup Language) on merkintämuoto, joka on rakennettu sisäkkäisten tagien, attribuuttien ja nimiavaruuksien ympärille. Se suunniteltiin dokumentteja ja rakenteista tiedonvaihtoa varten, ja se kantaa paljon koneistoa: skeemoja (XSD), nimiavaruuksia, käsittelyohjeita, kommentteja, CDATA-osioita ja muodollisen ilmoituksen alussa. Tuo rikkaus on syy siihen, miksi XML yhä hallitsee vanhoissa ja yritysjärjestelmissä. Löydät sen SOAP-verkkopalveluista, RSS- ja Atom-syötteistä, konfigurointitiedostoista (Spring, Maven, .NET-sovellusasetukset) ja finanssiviestintästandardeista kuten SWIFT ja ISO 20022, joissa pankit ja vakuutusyhtiöt yhä vaihtavat XML:ää päivittäin.
JSON (JavaScript Object Notation) on paljon yksinkertaisempi: objekteja avain/arvo-pareilla, taulukoita, merkkijonoja, lukuja, totuusarvoja ja null-arvoja. Se kartoittuu lähes yksi yhteen lähes jokaisen ohjelmointikielen datarakenteisiin, minkä vuoksi se valtasi modernit verkkorajapinnat, REST-päätepisteet, mobiilisovellukset ja konfigurointitiedostot kuten package.json. JSON on tyypillisesti 30–50 prosenttia pienempi kuin vastaava XML ja jäsentyy huomattavasti nopeammin, osittain koska se pudottaa sulkevat tagit ja attribuuttikoneiston, jotka tekevät XML:stä sanallisen.
Keskeiset erot, joilla on väliä muuntamisessa
Kaksi muotoa limittyvät riittävästi kartoittuakseen toisiinsa, mutta ei täysin siististi. Muutama rakenteellinen ero aiheuttaa lähes kaiken kitkan:
- Attribuutit versus lapsisolmut. XML erottaa
<user id="1">(attribuutti) ja<user><id>1</id></user>(lapsielementti). JSON:lla ei ole vastaavaa käsitettä, joten muuntimet keksivät sellaisen. Käytännön mukaan attribuutit taitetaan avaimeen kuten@attributestai etuliitetään@-merkillä, kun taas elementin teksti päätyy avaimeen kuten#text. - Taulukot. JSON:ssa on natiivit taulukot. XML:ssä ei. Lista XML:ssä on vain sama tagi toistettuna, kuten kolme
<item>-elementtiä peräkkäin. Muuntimien täytyy päätellä, milloin toistuvat sisarukset pitäisi taittaa JSON-taulukoksi ja milloin yksittäisen elementin tulisi pysyä tavallisena objektina. - Nimiavaruudet. XML käyttää nimiavaruuksia (
xmlns:soap-etuliitteet) välttääkseen nimitörmäyksiä skeemojen välillä. JSON:lla ei ole mitään vastaavaa, joten etuliitteet joko säilyvät kirjaimellisina merkkeinä avaimissa tai poistetaan. - Sanallisuus ja metadata. XML voi liittää metadataa solmuun attribuuttien kautta; JSON ilmaisee kaiken avaimina ja arvoina. Se tekee JSON:ista kompaktimman ja helpommin luettavan, kun taas XML säilyttää validointivoiman XSD-skeemojen kautta.
Muunnosansat, joita kannattaa varoa
Edestakainen muunnos JSON:sta XML:ksi takaisin JSON:ksi ja identtisen tuloksen odottaminen on klassinen virhe. Muunnos on häviöllinen molempiin suuntiin, ellet hallitse sääntöjä. Pidä nämä mielessä:
- Attribuutit menevät sekaisin. Kun muunnat JSON:in XML:ksi, työkalu tarvitsee säännön siitä, mitkä avaimet muuttuvat attribuuteiksi ja mitkä elementeiksi. Kun menet toiseen suuntaan, attribuuttien täytyy päätyä jonnekin, ja se "jonnekin" (
@-etuliite,@attributes-lohko) vaihtelee kirjastojen välillä. Jos jatkokäsittelevä jäsennin odottaa eri käytäntöä, data näyttää väärältä, vaikka mitään ei ole kadonnut. - Yksittäinen elementti versus taulukko. XML-syöte, jossa on yksi
<item>, tuottaa JSON-objektin; sama syöte kahdella kohteella tuottaa JSON-taulukon. Koodi, joka olettaa taulukon, rikkoutuu yhden kohteen tapauksessa. Tämä on yleinen RSS- ja SOAP-jäsennysvirheiden lähde. - Nimiavaruudet vuotavat tai katoavat. Työkalusta riippuen
soap:Bodysaattaa muuttua kirjaimellisestisoap:Body-nimiseksi avaimeksi, tai etuliite saatetaan pudottaa kokonaan, mikä muuttaa dokumentin merkitystä. - Sekasisältö ja tyypit. XML käsittelee kaiken tekstinä, joten arvo kuten
truetai42saattaa pysyä merkkijonona JSON:ksi muunnon jälkeen, kun taas päinvastaisessa suunnassa ei ole natiivia paikkaa kommenteille tai CDATA:lle.

Miksi vain paikallisella muunnoksella on väliä
JSON- ja XML-hyötykuormat ovat usein arkaluontoisin asia, jota kehittäjä käsittelee: rajapintavastauksia tunnuksilla, SOAP-viestejä tilinumeroilla, konfigurointitiedostoja tunnistetiedoilla. Muunnin, joka toimii selaimessasi, ei koskaan lataa mitään tästä. Jäsennys ja serialisointi tapahtuvat koneellasi, mitään ei lähetetä palvelimelle, ja voit käyttää työkalua offline-tilassa sivun latautumisen jälkeen. Tuotantodatan virheenkorjauksessa tai missä tahansa vaatimustenmukaisuusjärjestelmän alaisessa asiassa se on ero turvallisen pikatarkastuksen ja vahingossa tapahtuvan datavuodon välillä.
Jos sinun täytyy siistiä tulos jälkikäteen, yhdistä tämä muihin datamuuntimiimme, tai siisti tuloksesi JSON-muotoilijalla ennen sen antamista seuraavalle työkalulle putkessasi.
Usein kysytyt kysymykset
Lataako muunnin JSON:iani tai XML:ääni jonnekin?
Ei. Sekä JSON XML:ksi että XML JSON:ksi -muunnos toimii kokonaan selaimessasi. Datasi ei koskaan poistu laitteeltasi, ja työkalu toimii offline-tilassa sivun latautumisen jälkeen.
Miten XML-attribuutteja käsitellään muunnettaessa JSON:ksi?
XML-attribuutit sijoitetaan omistettuun avaimeen, yleisesti at-merkillä etuliitettynä tai ryhmiteltynä attribuuttilohkon alle, koska JSON:ssa ei ole natiivia attribuuttikäsitettä. Elementin tekstisisältö tallennetaan erikseen, joten molemmat säilyvät muunnoksessa.
Miksi yksittäisestä XML-elementistäni tuli objekti taulukon sijaan?
XML:ssä ei ole natiiveja taulukoita, joten lista on vain toistettu tagi. Kun vain yksi elementti on läsnä, muuntimet eivät voi erottaa sitä tavallisesta objektista, joten siitä tulee objekti. Kaksi tai useampi sisarusta samalla tagin nimellä taittuvat JSON-taulukoksi.
Mitä tapahtuu XML-nimiavaruuksille kuten soap tai xmlns?
JSON:lla ei ole vastinetta XML-nimiavaruuksille. Muunnoksesta riippuen etuliite säilyy kirjaimellisena tekstinä avaimen sisällä tai poistetaan. Tarkista tuloste, jos jatkokäsittelijäsi luottaa nimiavaruuden etuliitteisiin.
Voinko muuntaa JSON:in takaisin XML:ksi ja saada alkuperäisen dokumentin?
Ei aina täsmälleen. Muunnos on häviöllinen molempiin suuntiin, koska XML-ominaisuuksilla kuten kommenteilla, CDATA:lla ja attribuutin versus elementin erolla ei ole puhdasta JSON-vastinetta. Edestakainen muunnos toimii parhaiten, kun hallitset nimeämissääntöjä molemmilla puolilla.
Missä XML:ää käytetään yhä JSON:iin verrattuna?
XML elää vanhoissa ja yritysjärjestelmissä: SOAP-verkkopalveluissa, RSS- ja Atom-syötteissä, konfigurointitiedostoissa ja finanssiviestinnässä kuten SWIFT ja ISO 20022. JSON hallitsee moderneja verkkorajapintoja, REST-päätepisteitä ja mobiilisovelluksia.
