Conversione da JSON a XML

Converte in XML i dati in formato JSON. La convenzione riporta la chiave @attributes negli attributi dell'elemento, #text nel contenuto testuale e i vettori in elementi fratelli omonimi; tutto si svolge nel navigatore. Si usa in coppia con lo strumento affine di conversione da XML a JSON.

Come funziona questa conversione da JSON a XML

JSON e XML descrivono entrambi dati strutturati, ma non descrivono esattamente le stesse cose. XML dispone di attributi e di contenuto testuale, due concetti che in JSON non esistono. Ogni conversione diretta incontra quindi sempre le stesse due domande: come esprimere gli attributi e come restituire a un array la sua forma di elementi ripetuti. Questo strumento segue la convenzione più diffusa e fa corrispondere @attributes agli attributi dell'elemento, #text al contenuto testuale e gli array a elementi fratelli che condividono lo stesso nome.

Per esempio {"book": {"@attributes": {"id": "1"}, "#text": "Titolo"}} diventa <book id="1">Titolo</book>, mentre {"items": {"item": [1, 2]}} produce un elemento <items> che contiene i due fratelli <item>1</item> e <item>2</item> (XML ammette un solo elemento radice, quindi un array va racchiuso in un elemento padre). Nel contenuto testuale &, < e > vengono automaticamente convertiti in riferimenti a entità e nei valori degli attributi viene convertito anche il doppio apice, così un valore che contiene punteggiatura non genera mai XML malformato. Tutta l'elaborazione avviene nel suo browser e nulla viene inviato a un server.

Come convertire JSON in XML

  1. Incolli il JSON Inserisca il JSON da convertire. XML ha un solo elemento radice, quindi il livello superiore deve essere un oggetto con un'unica chiave, il nome dell'elemento radice (racchiuda un array in un padre, per esempio {"items": {"item": [...]}}).
  2. Metta in @attributes ciò che deve essere un attributo Raccolga in un oggetto @attributes le chiavi che desidera ottenere come attributi dell'elemento.
  3. Metta il contenuto testuale in #text Quando un elemento deve portare insieme attributi e corpo, collochi il valore del corpo sotto #text.
  4. Controlli il risultato e lo copi Ottiene un XML indentato, pronto da incollare in un file di configurazione o in una richiesta API.

Consigli per sfruttarlo al meglio

  • Assegnando un oggetto alla chiave @attributes, ciascuna sua proprietà diventa un attributo dell'elemento risultante.
  • La chiave #text serve a esprimere il contenuto testuale di un elemento che convive con attributi o elementi figli. Per un elemento semplice, privo di attributi, basta assegnare direttamente una stringa come valore.
  • Assegnando un vettore a una chiave, ciascun elemento del vettore è prodotto come elemento fratello omonimo, ripetuto.
  • Assegnando il valore nullo si ottiene un marcatore autoconcluso vuoto, come <tag/>, privo di attributi, testo ed elementi figli.
  • Lo strumento presuppone in ingresso il formato prodotto dalla conversione affine da XML a JSON: un oggetto la cui chiave è il nome dell'elemento radice, con una sola chiave al livello superiore.

Quando torna utile

Inviare a un'API che accetta solo XML

Quando i suoi dati sono in JSON ma il destinatario pretende XML: una situazione frequente nell'integrazione con sistemi gestionali datati.

Migrare un formato di configurazione

Utile come prima bozza per portare impostazioni scritte in JSON verso uno strumento basato su XML.

Ragionare la struttura XML in JSON

Scrivere a mano un XML molto annidato è faticoso; comporlo in JSON e convertirlo poi risulta assai più leggibile.

Fissare la convenzione stessa

Provare come si riflettono @attributes e #text aiuta a definire le specifiche di un convertitore che sta scrivendo lei.

I termini della conversione da JSON a XML

Attributo
La parte id="1" di <book id="1">. JSON non ha un equivalente, perciò questo strumento la rappresenta con la chiave speciale @attributes.
Contenuto testuale (#text)
Il corpo di <book>Titolo</book>. Usi #text quando un elemento deve portare attributi e corpo insieme.
Riferimento a entità (escape)
Riscrivere & come & e così via. La e commerciale va convertita per prima, altrimenti la & di un < appena prodotto viene convertita una seconda volta.
Elementi fratelli ripetuti
XML esprime un elenco ripetendo elementi con lo stesso nome di tag. Un array JSON ritorna a questa forma.
Elemento radice
XML richiede esattamente un elemento al livello più alto. Quando il livello superiore del suo JSON contiene più chiavi, il punto merita attenzione.

Domande frequenti

Assegnando un oggetto alla chiave chiamata @attributes, ciascuna sua proprietà diventa un attributo dell'elemento XML. Per esempio {"@attributes": {"category": "fiction"}} produce l'attributo category="fiction".

Assegnando un vettore a una chiave, ciascun elemento è prodotto più volte come elemento fratello omonimo. Per esempio "book": [{"title": "A"}, {"title": "B"}] genera un XML con due marcatori <book>.

La più frequente è un errore di sintassi nel JSON: una virgola di troppo o mancante, una virgoletta non chiusa. Inoltre, poiché un documento XML deve avere un solo elemento radice, danno errore anche i documenti con più chiavi al livello superiore o con un vettore alla radice.

Sì: sul sito è presente lo strumento dedicato alla conversione inversa. Adottando la stessa convenzione, il contenuto si conserva passando dall'uno all'altro nei due sensi.

Lo strumento presuppone il formato prodotto dalla conversione da XML a JSON, cioè la convenzione fondata su @attributes, #text, i vettori e il valore nullo. Un JSON di forma libera che non vi si attenga — per esempio la risposta di un'interfaccia ricca di numeri e valori logici — può non produrre la struttura XML desiderata.
Tool-kun

A proposito — a che cosa badare quando si «torna» dal JSON all'XML

La conversione da XML a JSON somiglia a una compressione dell'informazione. L'XML può portare tre generi di informazione — attributi, testo ed elementi figli — mentre il JSON dispone della sola corrispondenza fra chiave e valore: occorre perciò adottare una convenzione, qui fondata su quattro accordi, cioè @attributes, #text, i vettori e il valore nullo. Rispettata quella convenzione, il ritorno dal JSON all'XML è meccanicamente univoco; forzando invece la conversione di un JSON di forma libera, non si distingue più ciò che è attributo da ciò che è elemento e il risultato può divergere dalle attese.

Nella pratica capita di convertire in JSON la risposta di una vecchia interfaccia XML, elaborarla in JavaScript e riconvertirla in XML per inviarla a un altro sistema: per esempio quando occorre rimandare come richiesta SOAP ciò che si è comodamente elaborato in JSON. In queste conversioni di andata e ritorno la coerenza della convenzione è la cosa più importante: inserendo per strada uno strumento che ne adotti una diversa, la corrispondenza fra attributi e testo si guasta.

La regola rigorosa secondo cui al livello superiore deve esserci una sola chiave riflette la specifica stessa dell'XML, che vuole un unico elemento radice. Se dovete convertire un JSON con più chiavi al livello superiore, racchiudetele prima in una chiave genitrice comune, per esempio root, e otterrete un XML con un solo elemento radice.