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
-
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": [...]}}). -
Metta in @attributes ciò che deve essere un attributo
Raccolga in un oggetto
@attributesle chiavi che desidera ottenere come attributi dell'elemento. -
Metta il contenuto testuale in #text
Quando un elemento deve portare insieme attributi e corpo, collochi il valore del corpo sotto
#text. - 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
#textserve 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#textquando 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
@attributes, ciascuna sua proprietà diventa un attributo dell'elemento XML. Per esempio {"@attributes": {"category": "fiction"}} produce l'attributo category="fiction"."book": [{"title": "A"}, {"title": "B"}] genera un XML con due marcatori <book>.@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.
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.