CodeKitHub
JSON orodja

Pretvornik JSON ↔ XML

Nazadnje posodobljeno:

Za pretvorbo JSON-a v XML vsak ključ postane oznaka elementa, vsaka vrednost pa njegova besedilna vsebina — gnezdeni objekti postanejo gnezdeni elementi, polja postanejo ponovljeni sorojenski elementi, XML atributi pa se preslikajo v ključe `@_ime` v JSON-u, tako da povratna pretvorba ostane brez izgub. To orodje izvede to pretvorbo, v obe smeri, v celoti v tvojem brskalniku.

Kaj je to orodje?

XML in JSON sta oba drevesno oblikovana podatkovna formata, a se pojavljata na različnih mestih: podedovani podjetniški API-ji, storitve SOAP, viri RSS/Atom in mnogi konfiguracijski formati še vedno govorijo XML, medtem ko sodobni REST API-ji in JavaScript koda skoraj izključno govorijo JSON. To orodje prevaja med njima, tako da ti ni treba nobenega ročno pisati pri povezovanju starih in novih sistemov.

Pretvorba je zgrajena neposredno na API-ju DOMParser brskalnika za branje XML-a, ustvarjanje pa sledi strukturi, ki jo opredeljuje specifikacija W3C XML 1.0 — tako da je ustvarjeni XML dobro oblikovan, sprejeti XML pa je razčlenjen enako, kot bi ga razčlenil brskalnik ali katera koli standardom skladna knjižnica XML.

Ker ima XML koncepte, ki jih JSON nima (atribute, mešano besedilno/elementno vsebino, obvezen en sam korenski element), JSON pa ima koncepte, ki jih XML nima (naravna polja, logične vrednosti, števila), orodje uporablja dokumentirano, splošno uveljavljeno konvencijo: XML atribut `ime="vrednost"` postane JSON ključ `"@_ime": "vrednost"`, besedilna vsebina elementa pa postane bodisi neposredna niznjena vrednost elementa (kadar nima podrejenih elementov ali atributov) bodisi ključ `"#text"` ob morebitnih atributih, ponovljeni sorojenski elementi z isto oznako pa postanejo JSON polje.

Zakaj ga uporabiti?

  • Dvosmerno — pretvori JSON v XML ali XML v JSON z istega zaslona.
  • Pravilno obravnava gnezdenje — gnezdeni JSON objekti postanejo gnezdeni XML elementi in obratno, na poljubni globini.
  • Polja se preslikajo v ponovljene elemente — JSON polje pod ključem postane toliko sorojenskih XML elementov z isto oznako, ponovljene XML oznake pa se vrnejo kot JSON polje.
  • XML atributi so ohranjeni — z uporabo konvencije `@_imeAtributa`, tako da podatki o atributih niso tiho izgubljeni.
  • Kopiraj v odložišče ali prenesi kot datoteko .json ali .xml.
  • 100 % odjemalsko — nič, kar prilepiš, se nikamor ne naloži.

Kako ga uporabljati

  1. Izberi smer: "XML → JSON" ali "JSON → XML".
  2. Prilepi svoje podatke v vhodno polje.
  3. Klikni "Pretvori".
  4. Preglej rezultat, nato ga kopiraj ali klikni "Prenesi", da shraniš datoteko.

Primer

Vnos

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

Rezultat

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

En sam ključ na najvišji ravni JSON-a ("user") postane koren XML elementa; če ima JSON več ključev na najvišji ravni, orodje vse zavije v element <root>, saj XML zahteva natanko en koren.

Praktični nasveti

  • Migracija podedovane XML konfiguracije (kot je nastavitvena datoteka stare aplikacije) v sodoben sistem na osnovi JSON-a: prilepi XML, pretvori in po potrebi prilagodi imena polj.
  • Testiranje končne točke SOAP ali XML-RPC iz JavaScripta: tukaj pretvori svoj JSON tovor zahteve v XML pred pošiljanjem, ali pretvori odgovor XML nazaj v JSON za enostaven pregled.
  • Če tvoj JSON uporablja polja za podatke, ki bi jih XML predstavil kot ponovljene elemente, poskrbi, da je polje najprej gnezdeno pod enim samim ključem (npr. {"items":{"item":[1,2,3]}}), namesto golo polje na najvišji ravni, saj XML ne more imeti več korenskih elementov.

Zakaj je konvencija atributa @_ pomembna

Najtežji del pretvorbe JSON/XML je, da lahko XML elementi hkrati nosijo dve vrsti podatkov — atribute in podrejeno vsebino — medtem ko ima navaden JSON objekt le ključe in vrednosti. Brez konvencije za njihovo ločevanje bi preprost pretvornik ali izgubil atribute v celoti ali jih pomešal s podrejenimi elementi na način, ki se ne da zanesljivo pretvoriti nazaj. Konvencija predpone `@_ime` (ki jo uporabljajo tudi splošno sprejete knjižnice v ekosistemu JavaScript) to reši tako, da atributom da ločeno, nedvoumno obliko ključa, tako da se `<product id="42">Widget</product>` čisto povratno pretvori v `{"product":{"@_id":"42","#text":"Widget"}}`, namesto da bi izgubil id ali napačno uganil, katera vrednost je katera.

Pogosta vprašanja

Kaj se zgodi z JSON-om, ki ima več kot en ključ na najvišji ravni?

XML zahteva en sam korenski element, zato če ima tvoj JSON objekt več ključev na najvišji ravni (npr. {"a":1,"b":2}), je izhod zavit v element <root>: <root><a>1</a><b>2</b></root>. Če ima tvoj JSON natanko en ključ na najvišji ravni, ta ključ neposredno postane ime korenskega elementa.

Kako so XML atributi predstavljeni v JSON-u?

Atribut, kot je <user id="7">, postane ključ "@_id": "7" v nastalem JSON objektu. To je pogosta, dokumentirana konvencija (ki jo uporabljajo knjižnice, kot je fast-xml-parser), ki ohranja atribute razločljive od podrejenih elementov.

Ali ponovljeni XML elementi postanejo JSON polje?

Da. Če ima element več podrejenih elementov z istim imenom oznake, npr. <items><item>1</item><item>2</item></items>, pretvorba v JSON ustvari {"items":{"item":["1","2"]}}. Pretvorba tega JSON-a nazaj v XML znova ustvari ponovljene elemente <item>.

Ali so števila in logične vrednosti ohranjene pri pretvorbi XML v JSON?

XML nima naravnega koncepta za števila ali logične vrednosti — vse je besedilo — zato se besedilna vsebina prenese kot JSON niz (npr. "30" namesto 30). Če potrebuješ numerične tipe, boš morala/moral ta polja naknadno pretvoriti.

Ali se moji podatki kamor koli naložijo?

Ne. Razčlenjevanje in pretvorba potekata v celoti v JavaScriptu v tvojem brskalniku, z uporabo vgrajenega API-ja DOMParser — nič se ne pošlje na strežnik, kar to naredi varno za uporabo z zasebnimi konfiguracijskimi datotekami ali internimi tovori API-ja.

Sorodna orodja