XML precede JSON di quasi un decennio ed era la scelta predefinita per i servizi web (SOAP, RSS, la maggior parte dell'integrazione aziendale) durante gli anni 2000. JSON non lo ha superato in capacita, XML puo rappresentare qualsiasi cosa che JSON puo e di piu; ha vinto in peso e direzione per il lavoro specifico di spostare dati tra un server e un client.
Gli stessi dati, due modi
<user>
<name>Ada Lovelace</name>
<age>36</age>
<active>true</active>
<skills>
<skill>mathematics</skill>
<skill>writing</skill>
</skills>
</user>
{
"user": {
"name": "Ada Lovelace",
"age": 36,
"active": true,
"skills": ["mathematics", "writing"]
}
}
La versione XML necessita di un tag di chiusura per ogni apertura, e un
elemento <skill> ripetuto per rappresentare una lista, perché XML non ha una sintassi
nativa di vettore; un elemento <skills> con diversi figli <skill> potrebbe altrettanto
facilmente essere un singolo figlio <skill>, e solo uno schema o una convenzione dice al
lettore quale e. I [ ] di JSON dicono “lista” in modo non ambiguo in due caratteri.
Dove XML vince ancora
Attributi accanto al contenuto. <price currency="USD">42.00</price>
allega metadati a un valore senza inventare un oggetto contenitore. JSON non ha
concetto di attributo; gli stessi dati diventano {"price": {"value": 42.00, "currency": "USD"}} o una convenzione come una chiave @currency, entrambe meno
dirette della sintassi nativa di XML per esattamente questa forma.
Contenuto misto. Un paragrafo di testo con markup inline, <p>Some <b>bold</b> text</p>, e la forza nativa di XML, ed e per questo che i formati di documento
(DocBook, la maggior parte delle pipeline di pubblicazione, SVG) lo usano ancora. JSON non ha
modo di intrecciare testo e markup; rappresentare un ricco documento in
JSON di solito significa un albero di nodi tipati, che e piu codice da scrivere e
leggere che il markup che XML ti da gia gratuitamente.
Namespace e schemi stretti. XML Schema (XSD) e i namespace permettono a una grande organizzazione di mescolare vocabolari da fonti diverse in un documento senza collisioni di nomi, con strumenti che esistono da piu di vent'anni. JSON Schema esiste e fa un lavoro reale (il Generatore di JSON Schema ne inferisce uno da un documento reale), ma e piu giovane e meno universalmente distribuito di XSD nei grandi sistemi aziendali.
Dove JSON vince, che e la maggior parte delle API
Peso. Nessun tag di chiusura significa meno da trasmettere e meno da analizzare per gli stessi dati, spesso con un ampio margine su documenti profondamente annidati.
Mappatura diretta alle proprie strutture dati di un programma. JSON.parse in
JavaScript, o un equivalente in una riga in quasi tutti gli altri linguaggi,
trasforma un documento JSON nei tipi nativi di oggetto e vettore di quel linguaggio
senza modello intermedio. XML necessita di un DOM, o una classe generata da schema,
seduto tra il testo e i dati che un programma effettivamente usa.
Nessuna domanda di tipizzazione implicita. Ogni valore XML e testo finche qualcosa
di esterno (uno schema, una convenzione) non dice il contrario; <age>36</age> e una
stringa contenente “36” a meno che non sia detto di essere un numero. I tipi number, boolean,
e null di JSON sono espliciti nella sintassi stessa, quindi non c'e nulla da
configurare o indovinare.
In pratica
Le nuove API REST sono predefinite su JSON quasi senza eccezione oggi. XML persiste dove le sue stesse forze sono portanti: servizi SOAP nei sistemi aziendali piu vecchi, feed RSS e Atom, SVG e altri formati nativi di markup, e dove gli attributi o il contenuto misto sono la forma reale dei dati anziché un adattamento goffo.
Convertire tra essi
Il Convertitore JSON in XML funziona in entrambe le direzioni,
con controlli per i prefissi dei namespace e se un dato valore diventa un
attributo XML o un elemento figlio, dato che quella scelta non ha una singola risposta
corretta e dipende da cosa sta consumando l'output. Usa il DOMParser del browser
per leggere XML invece di un parser fatto a mano, e ogni
valore torna come una stringa all'ingresso, che lo strumento indica invece di
indovinare in silenzio tipi che XML stesso non trasporta.