Kas ir šis rīks?
XML un JSON abi ir koka formas datu formāti, taču tie parādās dažādās vietās: mantotas uzņēmumu API, SOAP pakalpojumi, RSS/Atom plūsmas un daudzi konfigurācijas formāti joprojām izmanto XML, kamēr mūsdienu REST API un JavaScript kods gandrīz vienmēr izmanto JSON. Šis rīks tulko starp abiem, lai jums nebūtu ar roku jāraksta neviens no tiem, integrējot vecas un jaunas sistēmas.
Konvertēšana ir veidota tieši uz pārlūka DOMParser API bāzes XML lasīšanai, un seko struktūrai, ko definē W3C XML 1.0 specifikācija tā ģenerēšanai — tāpēc XML, ko tas ģenerē, ir labi formēts, un XML, ko tas pieņem, tiek parsēts tāpat, kā to parsētu pārlūks vai jebkura standartiem atbilstoša XML bibliotēka.
Tā kā XML ir jēdzieni, kādu JSON nav (atribūti, jaukts teksta/elementa saturs, obligāts viens sakņu elements), un JSON ir jēdzieni, kādu XML nav (nativie masīvi, būlas, skaitļi), rīks izmanto dokumentētu, plaši izmantotu konvenciju: XML atribūts `name="value"` kļūst par JSON atslēgu `"@_name": "value"`, elementa teksta saturs kļūst vai nu par elementa tiešo virknes vērtību (kad tam nav bērnu vai atribūtu), vai par `"#text"` atslēgu kopā ar jebkuriem atribūtiem, un atkārtoti brāļu elementi ar to pašu tagu kļūst par JSON masīvu.
Kāpēc to izmantot?
- Divvirzienu — konvertējiet JSON uz XML vai XML uz JSON no vienas ekrāna.
- Pareizi apstrādā ligzdošanu — ligzdoti JSON objekti kļūst par ligzdotiem XML elementiem un otrādi, jebkurā dziļumā.
- Masīvi kartējas uz atkārtotiem elementiem — JSON masīvs zem atslēgas kļūst par tik daudz brāļu XML elementiem ar to pašu tagu, un atkārtoti XML tagi atgriežas kā JSON masīvs.
- XML atribūti tiek saglabāti — izmantojot `@_atribūtaNosaukums` konvenciju, tāpēc atribūtu dati netiek klusi izmesti.
- Kopēšana starpliktuvē vai lejupielāde kā .json vai .xml fails.
- 100% klienta pusē — nekas, ko ielīmējat, netiek nekur augšupielādēts.
Kā to lietot
- Izvēlieties virzienu: "XML → JSON" vai "JSON → XML".
- Ielīmējiet savus datus ievades lodziņā.
- Nospiediet "Konvertēt".
- Pārskatiet rezultātu, tad nokopējiet to vai nospiediet "Lejupielādēt", lai saglabātu failu.
Piemērs
Ievade
{"user":{"name":"Alice","age":30}}Izvade
<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>Alice</name>
<age>30</age>
</user>Vienīgā augšējā līmeņa JSON atslēga ("user") kļūst par XML sakni; ja JSON ir vairāk nekā viena augšējā līmeņa atslēga, rīks ietver visu <root> elementā, jo XML prasa tieši vienu sakni.
Praktiski padomi
- Mantotas XML konfigurācijas (piemēram, vecas lietotnes iestatījumu faila) migrēšana uz mūsdienīgu, uz JSON balstītu sistēmu: ielīmējiet XML, konvertējiet, un pēc vajadzības pielāgojiet lauku nosaukumus.
- SOAP vai XML-RPC galapunkta testēšana no JavaScript: konvertējiet savu JSON pieprasījuma slodzi uz XML šeit pirms sūtīšanas, vai konvertējiet XML atbildi atpakaļ uz JSON, lai to viegli pārbaudītu.
- Ja jūsu JSON izmanto masīvus datiem, ko XML attēlotu kā atkārtotus elementus, vispirms pārliecinieties, ka masīvs ir ligzdots zem vienas atslēgas (piemēram, {"items":{"item":[1,2,3]}}), nevis kails augšējā līmeņa masīvs, jo XML nevar būt vairāki sakņu elementi.
Kāpēc @_ atribūta konvencija ir svarīga
Vissarežģītākā JSON/XML konvertēšanas daļa ir tā, ka XML elementi var vienlaikus nest divu veidu datus — atribūtus un bērnu saturu — kamēr vienkāršam JSON objektam ir tikai atslēgas un vērtības. Bez konvencijas šo nošķiršanai, naivs konvertētājs vai nu pilnībā zaudētu atribūtus, vai sajauktu tos ar bērnu elementiem tā, ka to nevar uzticami konvertēt atpakaļ. `@_name` prefiksa konvencija (ko izmanto arī plaši pieņemtas bibliotēkas JavaScript ekosistēmā) to atrisina, dodot atribūtiem atšķirīgu, viennozīmīgu atslēgas formu, tāpēc `<product id="42">Widget</product>` tīri apļveida kā `{"product":{"@_id":"42","#text":"Widget"}}`, nevis pazaudē id vai nepareizi min, kura vērtība bija kura.
Biežāk uzdotie jautājumi
Kas notiek ar JSON ar vairāk nekā vienu augšējā līmeņa atslēgu?
XML prasa vienu sakņu elementu, tāpēc, ja jūsu JSON objektam ir vairākas augšējā līmeņa atslēgas (piemēram, {"a":1,"b":2}), izvade tiek ietverta <root> elementā: <root><a>1</a><b>2</b></root>. Ja jūsu JSON ir tieši viena augšējā līmeņa atslēga, šī atslēga tieši kļūst par sakņu elementa nosaukumu.
Kā XML atribūti tiek attēloti JSON?
Atribūts, piemēram, <user id="7">, kļūst par atslēgu "@_id": "7" iegūtajā JSON objektā. Tā ir izplatīta, dokumentēta konvencija (ko izmanto bibliotēkas, piemēram, fast-xml-parser), kas saglabā atribūtus atšķiramus no bērnu elementiem.
Vai atkārtoti XML elementi kļūst par JSON masīvu?
Jā. Ja elementam ir vairāki bērni ar to pašu taga nosaukumu, piemēram, <items><item>1</item><item>2</item></items>, konvertēšana uz JSON rada {"items":{"item":["1","2"]}}. Šī JSON konvertēšana atpakaļ uz XML atveido atkārtotos <item> elementus.
Vai skaitļi un būlas tiek saglabātas, konvertējot XML uz JSON?
XML nav nativā skaitļu vai būlu jēdziena — viss ir teksts — tāpēc teksta saturs nāk kā JSON virkne (piemēram, "30", nevis 30). Ja jums nepieciešami skaitliski tipi, jums šie lauki vēlāk jākonvertē.
Vai mani dati tiek kaut kur augšupielādēti?
Nē. Parsēšana un konvertēšana notiek pilnībā JavaScript jūsu pārlūkā, izmantojot iebūvēto DOMParser API — nekas netiek sūtīts uz serveri, tāpēc to droši var izmantot ar privātiem konfigurācijas failiem vai iekšējām API slodzēm.