CodeKitHub
JSON įrankiai

JSON ↔ XML konverteris

Paskutinį kartą atnaujinta:

Konvertuojant JSON į XML, kiekvienas raktas tampa elemento žymele, o kiekviena reikšmė – jo tekstiniu turiniu – įdėtiniai objektai tampa įdėtiniais elementais, masyvai tampa pasikartojančiais brolių elementais, o XML atributai atitinka `@_name` raktus JSON, kad grįžtamasis konvertavimas liktų bešvaistiškas. Šis įrankis atlieka tokį konvertavimą abiem kryptimis, visiškai jūsų naršyklėje.

Kas yra šis įrankis?

XML ir JSON abu yra medžio formos duomenų formatai, tačiau jie naudojami skirtingose vietose: senos įmonių API, SOAP paslaugos, RSS/Atom kanalai ir daug konfigūracijos formatų vis dar naudoja XML, o šiuolaikinės REST API ir „JavaScript" kodas naudoja beveik išimtinai JSON. Šis įrankis verčia tarp šių dviejų, kad jums nereikėtų rankiniu būdu rašyti nei vieno iš jų integruojant senas ir naujas sistemas.

Konvertavimas sukurtas tiesiogiai naudojant naršyklės DOMParser API XML skaitymui ir seka W3C XML 1.0 specifikacijos apibrėžtą struktūrą jo generavimui – tad generuojamas XML yra tinkamai suformuotas, o priimamas XML perpinamas taip pat, kaip tai darytų naršyklė ar bet kuri standartus atitinkanti XML biblioteka.

Kadangi XML turi sąvokas, kurių neturi JSON (atributai, mišrus teksto/elemento turinys, privalomas vienas šakninis elementas), o JSON turi sąvokas, kurių neturi XML (natyvūs masyvai, loginiai dydžiai, skaičiai), įrankis naudoja dokumentuotą, plačiai naudojamą konvenciją: XML atributas `name="value"` tampa JSON raktu `"@_name": "value"`, elemento teksto turinys tampa arba elemento tiesiogine eilutės reikšme (kai jis neturi vaikų ar atributų), arba `"#text"` raktu šalia bet kokių atributų, o pasikartojantys brolių elementai su tuo pačiu žymekliu tampa JSON masyvu.

Kodėl jį naudoti?

  • Dvikryptis – konvertuokite JSON į XML arba XML į JSON tame pačiame ekrane.
  • Teisingai apdoroja įdėtinius struktūras – įdėtiniai JSON objektai tampa įdėtiniais XML elementais ir atvirkščiai, bet kokiame gylyje.
  • Masyvai atitinka pasikartojančius elementus – JSON masyvas po raktu tampa tiek pat brolių XML elementų su tuo pačiu žymekliu, o pasikartojantys XML žymekliai grįžta kaip JSON masyvas.
  • XML atributai išsaugomi – naudojant `@_attributeName` konvenciją, tad atributų duomenys tyliai neprarandami.
  • Kopijuoti į iškarpinę arba atsisiųsti kaip .json ar .xml failą.
  • 100% vietinis apdorojimas – niekas, ką įklijuojate, niekur neįkeliama.

Kaip naudoti

  1. Pasirinkite kryptį: „XML → JSON" arba „JSON → XML".
  2. Įklijuokite savo duomenis į įvesties langelį.
  3. Spustelėkite „Konvertuoti".
  4. Peržiūrėkite rezultatą, tada nukopijuokite jį arba spustelėkite „Atsisiųsti", kad išsaugotumėte failą.

Pavyzdys

Įvestis

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

Išvestis

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

Vienintelis viršutinio lygio JSON raktas („user") tampa XML šakniniu elementu; jei JSON turi daugiau nei vieną viršutinio lygio raktą, įrankis apvynioja viską <root> elemente, nes XML reikalauja lygiai vieno šaknies elemento.

Praktiniai patarimai

  • Perkeliate seną XML konfigūraciją (pvz., senos programos nustatymų failą) į šiuolaikinę JSON pagrindu veikiančią sistemą: įklijuokite XML, konvertuokite ir prireikus koreguokite laukų pavadinimus.
  • Testuojate SOAP ar XML-RPC galinį tašką iš „JavaScript": konvertuokite savo JSON užklausos krovinį į XML čia prieš siųsdami, arba konvertuokite XML atsakymą atgal į JSON, kad lengvai jį patikrintumėte.
  • Jei jūsų JSON naudoja masyvus duomenims, kuriuos XML pavaizduotų kaip pasikartojančius elementus, pirmiausia įsitikinkite, kad masyvas yra įdėtas po vienu raktu (pvz., {"items":{"item":[1,2,3]}}), o ne tiesiog viršutinio lygio masyvas, nes XML negali turėti kelių šakninių elementų.

Kodėl svarbi @_ atributo konvencija

Sudėtingiausia JSON/XML konvertavimo dalis yra tai, kad XML elementai gali nešti dviejų rūšių duomenis vienu metu – atributus ir vaikinį turinį – kai tuo tarpu paprastas JSON objektas turi tik raktus ir reikšmes. Be konvencijos, kuri išlaikytų juos atskirus, naivus konverteris arba visiškai prarastų atributus, arba sumaišytų juos su vaikiniais elementais taip, kad negalėtų patikimai konvertuoti atgal. `@_name` priešdėlio konvencija (taip pat naudojama plačiai priimtų bibliotekų „JavaScript" ekosistemoje) tai sprendžia, suteikdama atributams aiškų, nedviprasmišką rakto formą, tad `<product id="42">Widget</product>` grįžtamai konvertuojasi švariai kaip `{"product":{"@_id":"42","#text":"Widget"}}` vietoj id praradimo ar neteisingo spėjimo, kuri reikšmė buvo kuri.

Dažniausiai užduodami klausimai

Kas nutinka JSON su daugiau nei vienu viršutinio lygio raktu?

XML reikalauja vieno šakninio elemento, tad jei jūsų JSON objektas turi kelis viršutinio lygio raktus (pvz., {"a":1,"b":2}), išvestis apvyniojama <root> elemente: <root><a>1</a><b>2</b></root>. Jei jūsų JSON turi lygiai vieną viršutinio lygio raktą, tas raktas tiesiogiai tampa šaknies elemento pavadinimu.

Kaip XML atributai vaizduojami JSON?

Atributas kaip <user id="7"> tampa raktu "@_id": "7" gaunamame JSON objekte. Tai dažna, dokumentuota konvencija (naudojama tokių bibliotekų kaip fast-xml-parser), kuri išlaiko atributus atskiriamus nuo vaikinių elementų.

Ar pasikartojantys XML elementai tampa JSON masyvu?

Taip. Jei elementas turi kelis vaikus su tuo pačiu žymeklio pavadinimu, pvz., <items><item>1</item><item>2</item></items>, konvertavimas į JSON sukuria {"items":{"item":["1","2"]}}. To JSON konvertavimas atgal į XML atkuria pasikartojančius <item> elementus.

Ar skaičiai ir loginiai dydžiai išsaugomi konvertuojant XML į JSON?

XML neturi natyvios skaičių ar loginių dydžių sąvokos – viskas yra tekstas – tad tekstinis turinys pereina kaip JSON eilutė (pvz., "30", o ne 30). Jei jums reikia skaitinių tipų, tuos laukus turėsite konvertuoti vėliau.

Ar mano duomenys kur nors įkeliami?

Ne. Perpynimas ir konvertavimas vyksta visiškai „JavaScript" jūsų naršyklėje, naudojant integruotą DOMParser API – niekas nesiunčiama į serverį, todėl saugu naudoti su privačiais konfigūracijos failais ar vidiniais API kroviniais.

Susiję įrankiai