Convertire XML in JSON

Qui converti XML in JSON gratis e senza account: trascina il file qui sopra e in un paio di secondi il risultato è pronto da scaricare. La conversione avviene dentro il tuo browser, quindi il file non viene mai caricato. Funziona allo stesso modo su Windows, macOS e Linux e anche su iPhone e Android, e continua a funzionare anche se stacchi la connessione.

  • Dove gira Nel tuo browser. Il file non viene mai caricato.
  • Ricostruito JSON funziona in modo diverso da XML. Non è quindi il degrado graduale di un codec con perdita: quello che JSON sa esprimere viene riprodotto fedelmente, e quello che lì non ha un equivalente non sopravvive affatto.
  • Limite di dimensione Fino a 100 MB per file, gratis e senza account.
  • Vale la pena saperlo Attributi e nodi di testo dell’XML diventano entrambi chiavi, ed è una decisione che il convertitore prende al posto tuo.

Fino a 100 file alla volta. Formati diversi insieme non sono un problema.

La convenzione: @ per gli attributi, #text per il contenuto

XML porta informazione in tre posti — nomi degli elementi, attributi e testo — e JSON ha solo chiavi e valori, quindi serve una convenzione. Questa è quella comune: ogni elemento diventa una chiave il cui valore è un oggetto con i suoi figli, ogni attributo diventa una chiave su quello stesso oggetto preceduta da @, e il testo proprio di un elemento, quando ha figli o attributi accanto, viene memorizzato sotto la chiave #text.

Un elemento con solo testo è più semplice: diventa una stringa senza alcun oggetto contenitore. Questa incoerenza è inevitabile e conviene interiorizzarla presto, perché significa che il valore a un certo percorso è a volte una stringa e a volte un oggetto, a seconda che l’elemento sorgente avesse per caso un attributo.

Uno o molti, e perché la forma del JSON dipende dai dati

Questo è l’aspetto più costoso nel consumare XML convertito. Un documento XML non dice quali elementi si ripetono — solo uno schema lo direbbe, e il parser non ne sta leggendo uno. Quindi un canale con un solo elemento item produce un oggetto, e un canale con due produce un array di oggetti.

Codice scritto contro un feed RSS completo si rompe il giorno in cui il feed ha una sola voce, e codice scritto contro una risposta SOAP con un solo record si rompe la prima volta che ne arrivano due. Non c’è opzione qui che lo risolva, perché servirebbe conoscere lo schema. Scrivete il consumer per accettare entrambe le forme: convertite ogni collezione in array come prima cosa, prima che qualsiasi altra logica la tocchi.

I prefissi di namespace restano dentro i nomi delle chiavi

Una busta SOAP arriva con i prefissi intatti: soap:Envelope diventa una chiave chiamata letteralmente "soap:Envelope", e le dichiarazioni di namespace arrivano come attributi tipo "@xmlns:soap". Niente viene risolto, niente viene rimosso.

È fedele ed è fragile, perché un prefisso è arbitrario. Un servizio che emette soapenv:Envelope una settimana e soap:Envelope quella dopo ha prodotto due documenti equivalenti e due strutture JSON incompatibili. Se controllate il consumer, confrontate il nome locale dopo i due punti invece della chiave completa, e non codificate mai un prefisso che non avete definito voi.

La dichiarazione XML diventa una chiave chiamata ?xml

Un documento che apre con una dichiarazione di versione e codifica produce una chiave di primo livello chiamata "?xml" con i suoi attributi, accanto alla chiave dell’elemento radice. Non fa parte del contenuto del documento, ma è nel vostro JSON.

Gestitela ignorandola o eliminandola, ma non assumete che l’elemento radice sia l’unica chiave di primo livello. Codice che legge la prima chiave dell’oggetto per trovare la radice troverà invece la dichiarazione su qualsiasi documento che ne ha una, cioè sulla maggior parte.

Attributi e valori degli elementi vengono interpretati, non copiati

I valori che sembrano numerici diventano numeri JSON, sia negli attributi sia nel testo degli elementi. Un attributo version scritto 1.0 diventa 1. Un identificativo scritto 007 diventa 7. Un valore con zeri iniziali scritto 0755 diventa 755.

È comodo per un conteggio e distruttivo per qualsiasi cosa trattaste come token opaco. Numeri d’ordine, codici prodotto, codici postali, versioni di protocollo e permessi file falliscono tutti allo stesso modo, e nessuno solleva un errore. Conviene controllare, una volta, ogni attributo dell’output che intendete confrontare come stringa.

Commenti, CDATA e contenuto misto

I commenti vengono eliminati senza traccia, il che su un payload è di solito innocuo e su un file di configurazione è una perdita reale. CDATA viene srotolato: qualunque cosa fosse dentro la sezione diventa una stringa ordinaria, quindi un frammento HTML avvolto in CDATA — il modo normale in cui un feed RSS trasporta il corpo di un articolo — arriva come testo con parentesi angolari, e convertirlo di nuovo in XML le sfuggirebbe invece di ricostruire la sezione CDATA.

Il contenuto misto è il caso senza buona soluzione. Un elemento che contiene testo, poi un elemento figlio, poi altro testo tiene il figlio sotto la propria chiave e concatena le due porzioni di testo in un unico valore #text, senza alcun marcatore di dove il figlio si trovasse in mezzo. Qualsiasi documento dove prosa e markup si intrecciano — XHTML, DocBook, qualunque cosa narrativa — perde qui il proprio ordine.

Elementi vuoti e i valori che diventano stringhe vuote

Un elemento autochiudente e un elemento con corpo vuoto diventano entrambi una stringa vuota. XML non fa distinzione fra i due neppure lui, quindi nulla è stato perso, ma JSON ha null disponibile e non viene usato — un elemento vuoto è "" e non null.

La distinzione che invece sparisce è fra un elemento assente e uno presente ma vuoto, una volta che il vostro codice applica un valore predefinito. Entrambi finiscono per essere falsy. Dove la differenza conta — un campo opzionale esplicitamente svuotato contro uno mai impostato — controllate la presenza della chiave piuttosto che il suo valore.

Leggere una busta SOAP una volta diventata JSON

Messa insieme, una risposta SOAP si legge come chiavi annidate: la chiave envelope, dentro la chiave body, poi la risposta dell’operazione, poi il payload. Ogni livello mantiene il proprio prefisso e il tutto è profondo tre o quattro oggetti prima che compaiano i vostri dati, esattamente come era verboso l’XML e più facile da percorrere da codice.

Un fault è il caso da testare per primo. I fault SOAP usano una struttura di elementi diversa da una risposta riuscita, quindi il JSON per un errore non somiglia affatto al JSON per un risultato, e un client che ha visto solo il percorso felice leggerà undefined su un percorso che non esiste più. Convertite qui una vera risposta di fault e scrivete il ramo d’errore contro di essa prima che vi serva.

Scrivere codice contro una forma che può cambiare

L’output è indentato di due spazi, quindi si legge bene in revisione e si incolla direttamente in una fixture di test. Le fixture sono l’uso giusto per questo: convertire una risposta reale e archiviarla nel repository dà al consumer qualcosa di onesto contro cui essere testato, comprese tutte le stranezze descritte sopra.

Tre abitudini difensive coprono quasi ogni problema di questa pagina. Normalizzate in array tutto ciò che può ripetersi. Confrontate gli identificativi come stringhe, riconvertendoli in stringa al confine se il parser li ha resi numeri. Fate corrispondere le chiavi con namespace sulla loro parte locale.

Come convertire XML in JSON

  1. Trascina il tuo file XML su questa pagina, oppure fai clic per sceglierne uno.
  2. Scegli JSON come destinazione. La conversione avviene nel tuo browser e il file non viene caricato.
  3. Scarica il file JSON finito.

XML o JSON: cosa cambia

XML a confronto con JSON
XMLJSON
Nome completoExtensible Markup LanguageJavaScript Object Notation
Estensione del file.xml.json
Tipo di mediaapplication/xmlapplication/json
Prima pubblicazione19982001
Pubblicato daW3C
SpecificaXML 1.0RFC 8259
LicenzaStandard apertoStandard aperto
Situazione attualeAttualeAttuale
Si apre nel browserTutti i browserTutti i browser
Valutato al suo postoYAMLYAML, NDJSON

Che cosa si perde

I commenti non sopravvivono. XML permette di annotare un file e JSON non ha una sintassi per farlo, quindi ogni riga di spiegazione sparisce — e tocca proprio i file che si commentano: la configurazione che qualcun altro dovrà mantenere.

Aprire il risultato

Visual Studio Code legge sia XML sia JSON, quindi puoi confrontare il risultato con l'originale senza un secondo programma.

A che cosa serve ciascun formato

XML è il formato di W3C, pubblicato nel 1998. È descritto in XML 1.0, e vale la pena conoscerlo se il file deve sopravvivere allo strumento che lo ha scritto.

JSON risale al 2001, descritto in RFC 8259. Visual Studio Code, jq e Postman lo leggono.

Da XML a JSON: domande frequenti

Il mio file XML viene caricato da qualche parte?

No. Questa conversione avviene interamente nel tuo browser, quindi il file non esce dal tuo dispositivo. Puoi controllarlo da solo: apri la scheda di rete degli strumenti per sviluppatori e converti qualcosa. Vedrai la pagina stessa e le richieste di statistica e di pubblicità con cui questo servizio si paga, e nemmeno una che porti il tuo file.

Convertire XML in JSON è gratis?

Sì. Senza account, senza filigrana e senza una quota giornaliera da consumare: gira sulla tua macchina, quindi puoi tornare quante volte vuoi. Il browser lavora file fino a 100 MB, 100 per volta.

Si perde qualità convertendo XML in JSON?

XML e JSON descrivono il contenuto in modi radicalmente diversi. La conversione è quindi una ricostruzione e non una copia: fedele, ma non identica byte per byte. Attributi e nodi di testo dell’XML diventano entrambi chiavi, ed è una decisione che il convertitore prende al posto tuo.

I commenti sopravvivono da XML a JSON?

I commenti non sopravvivono. XML permette di annotare un file e JSON non ha una sintassi per farlo, quindi ogni riga di spiegazione sparisce — e tocca proprio i file che si commentano: la configurazione che qualcun altro dovrà mantenere.

Non sei sicuro di quale ti serve?

Questa pagina converte l’uno nell’altro. Se il dubbio è quale scegliere e non come convertire, XML vs JSON dice quale usare, per cosa, e in cosa ciascuno è debole.

Altro su questi formati