Conversione da XML a JSON

Converte in JSON i dati in formato XML. Permette di esaminare interamente nel navigatore il contenuto delle risposte delle vecchie interfacce XML, delle integrazioni SOAP e dei flussi RSS e Atom, con la convenzione che riporta gli attributi in @attributes, il testo in #text e gli elementi ripetuti in vettori.

Convertire l'XML in JSON

Capita di voler vedere il contenuto di una vecchia API XML, di uno scambio SOAP o di un feed RSS o Atom nella forma di JSON a cui si è abituati. Questo strumento converte l'XML che incollate e porta a termine l'intero lavoro dentro il browser, sicché nulla di ciò che incollate lascia mai il vostro apparecchio.

Un insieme di convenzioni serve proprio perché XML e JSON custodiscono i dati in modi radicalmente diversi. L'XML distingue gli attributi dal testo e consente a un elemento dello stesso nome di comparire quante volte occorra; il JSON non ha né l'una né l'altra cosa. Gli attributi vengono dunque riposti sotto @attributes, la stringa che un elemento porta direttamente sotto #text, e gli elementi ripetuti diventano array. Ciò a cui non si sfugge è l'ambiguità che nasce quando un elemento ripetibile compare una volta sola. Nell'XML originario resta un'occorrenza di qualcosa di ripetibile, ma in JSON sembra un valore unico, perciò il codice ricevente è più sicuro se scritto per reggere tanto un elemento quanto molti.

Come si usa

  1. Incollate l'XML Una risposta SOAP o un feed RSS si inseriscono esattamente come si presentano.
  2. Rivedete la conversione Gli attributi si posano sotto la chiave @attributes e il testo sotto #text.
  3. Confrontate le strutture Accostato all'XML originario, consente di verificare quale elemento sia finito sotto quale chiave.
  4. Copiate o scaricate il risultato Incollatelo direttamente nel vostro codice oppure salvatelo come file.

Consigli per sfruttarlo al meglio

  • Gli elementi dotati di attributi li raccolgono in un oggetto sotto la chiave @attributes, distinto dal testo e dagli elementi figli.
  • Negli elementi in cui attributi, elementi figli e testo convivono, la parte testuale è collocata nella chiave #text: non c'è quindi rischio di scambiarla con il valore di un attributo.
  • Quando più elementi fratelli portano lo stesso nome, sono automaticamente raccolti in un vettore: tre elementi <item> danno un vettore di tre elementi, uno solo resta un oggetto singolo.
  • Un elemento vuoto, privo di attributi, testo ed elementi figli — per esempio <flag/> — è convertito nel valore nullo.
  • I prefissi degli spazi dei nomi non sono separati: il nome dell'elemento resta nella forma ns:tag e si usa così come chiave.

Quando torna utile

Nel collegare un'API XML a codice che intende solo JSON

Quando la parte ricevente tratta soltanto JSON, potete fissare in anticipo la forma convertita.

Nell'analizzare un feed RSS o Atom

Le voci di un feed rese in JSON si percorrono assai più agevolmente con uno script, così come sono.

Nel leggere il contenuto di una risposta SOAP

Il SOAP, arduo da leggere per l'annidamento e gli spazi dei nomi, si segue assai meglio una volta dispiegata la gerarchia come JSON.

Nel costruire dati di prova

Da una risposta XML reale potete ricavare un simulacro in JSON.

Termini della convenzione di conversione

@attributes
La chiave che accoglie gli attributi di un elemento XML. Poiché il JSON non conosce la nozione di attributo, si riserva loro una chiave apposita.
#text
La chiave che accoglie la stringa che un elemento porta direttamente. Diventa necessaria per un elemento dotato insieme di attributi e di elementi figli.
Elemento ripetuto
Un elemento che compare più di una volta con lo stesso nome. In JSON diventa un array, ma un'occorrenza isolata figura come valore semplice e non come array di un solo elemento.
Prefisso di spazio dei nomi
La parte soap: di soap:Body. In JSON sopravvive intatta come parte del nome della chiave.
Contenuto misto
Testo ed elementi figli che convivono dentro uno stesso elemento. Il JSON non ha una struttura corrispondente, ed è qui che nella conversione l'informazione si perde più facilmente.
Elemento radice
L'unico elemento in cima all'XML. Diventa la chiave più esterna del JSON.

Domande frequenti

Gli attributi di ciascun elemento sono raccolti in un oggetto sotto la chiave @attributes. Per esempio <book category="fiction"> diventa {"@attributes": {"category": "fiction"}, ...}: essendo collocati altrove rispetto al valore proprio dell'elemento, cioè al testo e agli elementi figli, non c'è possibilità di confusione.

Quando sotto lo stesso genitore compaiono più elementi fratelli omonimi, essi sono raccolti automaticamente in un vettore. Se per esempio ci sono due marcatori <book>, il valore della chiave book nell'elemento genitore sarà un vettore di due elementi. Se ce n'è uno solo, resta un oggetto singolo.

Le più frequenti sono un marcatore di chiusura dimenticato o una corrispondenza sfasata, per esempio la chiusura con un nome diverso da quello di apertura. Inoltre, poiché un documento XML deve avere un solo elemento radice, dà errore anche l'incollatura di più elementi al livello superiore, come <a>...</a><b>...</b>.

Questo strumento opera in un solo verso, da XML a JSON. Per formattare il JSON in sé o per formattare e convalidare l'XML, usate gli altri strumenti del sito, come il formattatore JSON e quello XML.

Il prefisso non è separato e il nome resta nella forma ns:tag, usata come chiave. Poiché non si risolve lo spazio dei nomi, cioè non si abbina il prefisso al suo identificativo, negli XML che ne fanno un uso complesso la struttura risultante può non essere quella desiderata.
Tool-kun

A proposito — perché fra XML e JSON non esiste un'unica risposta giusta

Fra XML e JSON non esiste una convenzione di conversione assoluta, a differenza della semplice corrispondenza fra righe e oggetti che lega CSV e JSON. Nell'XML possono convivere tre generi di informazione — attributi, nodi di testo ed elementi figli — mentre il JSON dispone della sola corrispondenza fra chiave e valore: occorre dunque stabilire di volta in volta qualche accordo. Come rappresentare gli attributi, che cosa privilegiare quando testo ed elementi figli convivono: su questi punti le principali realizzazioni hanno adottato convenzioni diverse.

Ciò nonostante le occasioni di trattare XML non mancano. Le interfacce web di tipo SOAP, le integrazioni di antica data fra sistemi finanziari, amministrativi e sanitari, i flussi RSS e Atom, i file di disposizione delle applicazioni Android: sono molti gli ambiti in cui XML è tuttora il formato standard. Resta perciò forte l'esigenza di portare i dati ricavati da questi meccanismi datati nelle moderne catene di strumenti pensate per il JSON, dall'elaborazione con jq alla manipolazione degli oggetti in JavaScript.

La convenzione qui adottata, fondata su @attributes e #text, non si spinge fino alle notazioni più fitte di simboli e sceglie una forma semplice, di uso comune nella pratica. Gli elementi foglia privi di attributi conservano il testo come valore diretto, il che rende maneggevole il JSON nei casi ordinari — un valore di configurazione, il titolo di una notizia — mentre soltanto gli elementi con attributi sono distinti in modo esplicito: guardando il risultato si capisce dunque a colpo d'occhio da quale valore originario provenga ciascuna parte.