Vai al contenuto principale
CuteJSON
↑↓ Naviga Enter Seleziona Esc Chiudi

JSON vs XML: un confronto pratico

Pubblicato 3 min di lettura Di Akash Kinkar Pandey

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.

Torna a tutti i post