Mis see tööriist on?
XML ja JSON on mõlemad puukujulised andmevormingud, kuid neid kohtab erinevates kohtades: vanemad ettevõtte API-d, SOAP teenused, RSS/Atom voogsed ja paljud seadistusfailid räägivad ikka veel XML-i, samas kui tänapäevased REST API-d ja JavaScripti kood kasutavad peaaegu eranditult JSON-it. See tööriist tõlgib nende kahe vahel, et sul poleks vaja kumbagi käsitsi kirjutada, kui integreerid vanu ja uusi süsteeme.
Teisendus põhineb otse brauseri DOMParser API-l XML-i lugemiseks ning järgib W3C XML 1.0 spetsifikatsioonis määratletud struktuuri XML-i loomisel — seega on loodav XML korrektselt vormistatud ja vastuvõetav XML parsitakse samamoodi, nagu seda teeks brauser või mis tahes standarditele vastav XML-teek.
Kuna XML-il on mõisteid, mida JSON-il pole (atribuudid, segatud teksti/elemendi sisu, kohustuslik üksik juurelement), ja JSON-il on mõisteid, mida XML-il pole (loomupärased massiivid, tõeväärtused, arvud), kasutab tööriist dokumenteeritud ja laialdaselt kasutatavat kokkulepet: XML atribuudist `name="value"` saab JSON-i võti `"@_name": "value"`, elemendi tekstisisust saab kas elemendi otsene stringiväärtus (kui sellel pole lapselemente ega atribuute) või `"#text"` võti koos atribuutidega, ning korduvatest sama sildiga õdede-vendade elementidest saab JSON-i massiiv.
Miks seda kasutada?
- Kahesuunaline — muuda JSON XML-iks või XML JSON-iks samal ekraanil.
- Käsitleb pesastust korrektselt — pesastatud JSON-objektidest saavad pesastatud XML-elemendid ja vastupidi, mistahes sügavusel.
- Massiivid vastavad korduvatele elementidele — võtme all olevast JSON-massiivist saab vastav arv sama sildiga õdede-vendade XML-elemente, ja korduvatest XML-siltidest saab tagasi JSON-massiiv.
- XML atribuudid säilivad — kasutades `@_attributeName` kokkulepet, nii et atribuutide andmed ei kao vaikimisi kaduma.
- Kopeeri lõikelauale või laadi alla .json või .xml failina.
- 100% brauseripoolne — midagi, mida sa kleebid, ei laeta kuhugi üles.
Kuidas kasutada
- Vali suund: "XML → JSON" või "JSON → XML".
- Kleebi oma andmed sisestuskasti.
- Klõpsa "Convert".
- Vaata tulemus üle, seejärel kopeeri see või klõpsa "Download", et fail salvestada.
Näide
Sisend
{"user":{"name":"Alice","age":30}}Tulemus
<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>Alice</name>
<age>30</age>
</user>JSON-i ainsast tipptaseme võtmest ("user") saab XML juurelement; kui JSON-il on rohkem kui üks tipptaseme võti, mähib tööriist kõik <root> elementi, kuna XML nõuab täpselt üht juurt.
Praktilised nõuanded
- Vanema XML seadistuse (nagu vana rakenduse seadistusfail) teisendamine tänapäevasesse JSON-põhisesse süsteemi: kleebi XML, teisenda ja kohanda vajadusel väljanimesid.
- SOAP või XML-RPC lõpp-punkti testimine JavaScriptist: teisenda oma JSON päringu pakett siin enne saatmist XML-iks, või teisenda XML vastus tagasi JSON-iks, et seda kergesti üle vaadata.
- Kui su JSON kasutab andmete jaoks massiive, mida XML esitaks korduvate elementidena, veendu, et massiiv on kõigepealt pesastatud ühe võtme alla (nt {"items":{"item":[1,2,3]}}), mitte paljas tipptaseme massiiv, kuna XML-il ei saa olla mitut juurelementi.
Miks @_ atribuudikokkulepe on oluline
JSON/XML teisenduse kõige keerulisem osa on see, et XML-elemendid võivad korraga kanda kahte tüüpi andmeid — atribuute ja lapsesisu —, samas kui tavaline JSON-objekt koosneb lihtsalt võtmetest ja väärtustest. Ilma kokkuleppeta neid eraldi hoida kaotaks lihtne teisendaja atribuudid täielikult või seguneksid need lapselementidega viisil, mida ei saa usaldusväärselt tagasi teisendada. `@_name` eesliite kokkulepe (mida kasutavad ka JavaScripti ökosüsteemis laialt levinud teegid) lahendab selle, andes atribuutidele selge ja üheselt mõistetava võtme kuju, nii et `<product id="42">Widget</product>` teiseneb korrektselt kujule `{"product":{"@_id":"42","#text":"Widget"}}", selle asemel et id kaotada või valesti ära arvata, kumb väärtus oli kumb.
Korduma kippuvad küsimused
Mis juhtub JSON-iga, millel on rohkem kui üks tipptaseme võti?
XML nõuab üht juurelementi, seega kui su JSON-objektil on mitu tipptaseme võtit (nt {"a":1,"b":2}), mähitakse väljund <root> elementi: <root><a>1</a><b>2</b></root>. Kui su JSON-il on täpselt üks tipptaseme võti, saab sellest võtmest otse juurelemendi nimi.
Kuidas XML atribuudid JSON-is esitatakse?
Atribuudist nagu <user id="7"> saab tulemuseks olevas JSON-objektis võti "@_id": "7". See on levinud, dokumenteeritud kokkulepe (mida kasutavad ka teegid nagu fast-xml-parser), mis hoiab atribuudid lapselementidest selgelt eristatavana.
Kas korduvatest XML elementidest saab JSON massiiv?
Jah. Kui elemendil on mitu sama sildiga last, nt <items><item>1</item><item>2</item></items>, tekib JSON-iks teisendades {"items":{"item":["1","2"]}}. Selle JSON-i tagasi XML-iks teisendamine taastab korduvad <item> elemendid.
Kas arvud ja tõeväärtused säilivad XML-ist JSON-iks teisendamisel?
XML-il pole arvude ega tõeväärtuste jaoks loomupärast mõistet — kõik on tekst —, seega tuleb tekstisisu läbi JSON-i stringina (nt "30", mitte 30). Kui vajad numbrilisi tüüpe, tuleb need väljad hiljem eraldi teisendada.
Kas mu andmed laetakse kuhugi üles?
Ei. Parsimine ja teisendus toimuvad täielikult JavaScriptis sinu brauseris, kasutades sisseehitatud DOMParser API-t — midagi ei saadeta serverisse, mistõttu on tööriista ohutu kasutada ka privaatsete seadistusfailide või ettevõttesiseste API pakettidega.