Convertire JSON in XML è l'operazione inversa di un mapping con perdita, il che significa che dovrai prendere decisioni che JSON non ti aveva mai chiesto: qual è l'elemento radice? Questa chiave diventa attributo o elemento figlio? Come si trasforma un array JSON in tag XML ripetuti? Questa guida copre le convenzioni per JSON → XML —— elementi radice, array, attributi ed escape —— in JavaScript, Python e nel browser.
Scegliere un elemento radice
XML richiede esattamente un elemento radice; JSON non ha questa regola. La prima decisione è cosa avvolge tutto il resto. Se il tuo JSON è un oggetto con una sola chiave di primo livello, quella chiave è la radice naturale:
{ "note": { "to": "Ada", "from": "Bob" } }
<note>
<to>Ada</to>
<from>Bob</from>
</note>Se il JSON ha più chiavi di primo livello (o è un array), non c'è una radice unica, quindi i convertitori avvolgono tutto con un elemento sintetico come <root>:
{ "to": "Ada", "from": "Bob" }
<root>
<to>Ada</to>
<from>Bob</from>
</root>Attributi da chiavi con prefisso @
Per fare il round-trip con la convenzione XML → JSON, le chiavi che iniziano con @ vengono emesse come attributi invece che come elementi figli, e la chiave #text diventa il contenuto testuale dell'elemento:
{
"price": { "@currency": "USD", "#text": "9.99" }
}
<price currency="USD">9.99</price>Se non usi questa convenzione, ogni valore diventa un elemento figlio —— valido, solo più verboso. La convenzione @/#text è ciò che rende XML → JSON → XML senza perdita.
Gli array diventano elementi ripetuti
Un array JSON non diventa un singolo elemento con più valori —— diventa lo stesso elemento ripetuto, perché è così che XML rappresenta una lista:
{ "tags": { "tag": ["a", "b", "c"] } }
<tags>
<tag>a</tag>
<tag>b</tag>
<tag>c</tag>
</tags>Una conseguenza sottile: un array di oggetti di primo livello non può essere la radice (produrrebbe più elementi radice), quindi va avvolto —— di solito come <root> che contiene <item> ripetuti.
Valori senza mapping pulito
- Booleani e numeri —— XML non ha tipi, quindi
truee42vengono scritti come il testotruee42. - null —— di solito un elemento vuoto/autochiudente:
<middleName/>. - Chiavi che non sono nomi di elemento validi —— i nomi non possono iniziare con una cifra né contenere spazi.
"1st place"non è un tag legale e va sanitizzato, altrimenti produrrai XML non valido.
Escape e dichiarazione
I valori di testo e attributo devono fare escape di &, < e > (più " dentro gli attributi). Un convertitore dovrebbe anche anteporre la dichiarazione XML perché l'output sia un documento completo:
<?xml version="1.0" encoding="UTF-8"?>
<message>B & C are < D</message>Puntare a un XSD o produrre xmlns
Se il tuo consumer valida l'XML contro un XSD (XML Schema), la conversione deve fare qualcosa in più oltre al mapping chiave→elemento:
- L'ordine degli elementi conta. Gli attributi XML di un elemento sono non ordinati (per spec), ma gli elementi figli sì, e la maggior parte degli XSD lo impone con
xsd:sequence. Emetti i figli nell'ordine che lo schema si aspetta, non nell'ordine di iterazione delle chiavi dell'oggetto, altrimenti la validazione fallirà. - Mapping dei namespace. Ricrea le dichiarazioni
xmlnscome attributi@xmlnssulla radice e rifletti i nomi con prefisso nell'XML ("soap:Envelope"⇒<soap:Envelope>). Un convertitore che scarta i namespace produrrà XML che non valida contro nessun XSD che li richieda. - Valori consapevoli del tipo. XML non ha tipi nativi, quindi un XSD con
xsd:intoxsd:datesi limita a verificare che il contenuto testuale corrisponda. Formatta il valore JSON come testo nello schema atteso dall'XSD (data ISO, intero come stringa ecc.).
Come convertire JSON in XML nel codice
// JavaScript —— un piccolo builder ricorsivo, o una libreria:
import { XMLBuilder } from 'fast-xml-parser';
const builder = new XMLBuilder({ ignoreAttributes: false, attributeNamePrefix: '@' });
const xml = builder.build(jsonObject);
# Python —— dicttoxml, o costruisci con xml.etree.ElementTree
from dicttoxml import dicttoxml
xml_bytes = dicttoxml({"note": {"to": "Ada"}}, attr_type=False)Converti JSON in XML online
Incolla il tuo JSON nel convertitore JSON ⇄ XML e clicca To XML. Sceglie una radice sensata, mappa le chiavi @ su attributi, ripete elementi per gli array e fa l'escape dei caratteri speciali —— tutto nel browser. Se il JSON ha errori di sintassi, viene riparato prima; puoi anche pulirlo con JSON Fix.
Domande frequenti
Come converto JSON in XML?
Scegli un elemento radice (una singola chiave di primo livello, o un <root> sintetico) e converti ricorsivamente le chiavi in elementi figli, le chiavi con prefisso @ in attributi e gli array in elementi ripetuti —— facendo l'escape di &, < e > nel testo.
Come si converte un array JSON in XML?
Ogni elemento dell'array diventa un elemento separato con lo stesso nome di tag, perché XML rappresenta le liste come elementi ripetuti invece di un singolo nodo multivalore.
Come faccio diventare un valore JSON un attributo XML?
Prefissa la chiave con @ (es. "@id") e metti il testo dell'elemento sotto #text. Questo combacia con la convenzione standard XML → JSON, quindi la conversione è reversibile.
Cosa succede se una chiave JSON non è un nome di elemento XML valido?
I nomi di tag XML non possono iniziare con una cifra né contenere spazi, quindi chiavi come "1st place" vanno sanitizzate (es. in _1st_place), altrimenti l'output non sarà XML ben formato.
Strumenti e guide correlate
- Convertitore JSON ⇄ XML —— converte in entrambe le direzioni nel browser
- Conversione XML in JSON: attributi, nodi di testo, array e namespace —— la direzione inversa
- Come convertire CSV e XML in JSON
- Cos'è JSON? —— i tipi e le regole del formato sorgente