Confronto JSON e XML [chiuso]


273

Voglio sapere quale è più veloce: XML e JSON? Quando usare quale?


60
Più veloce dove? Trasmissione? In lavorazione? Generazione? Entrambi non hanno i piedi che conosci. È probabile che JSON sia "più veloce" in qualche modo poiché ha un overhead di markup inferiore. Dall'altro lato, XML fornisce XMLSchema per garantire tipi, struttura ... quindi validità. Esiste XSLT per trasformare XML in quasi tutti gli altri formati di output ... Dipende da ciò di cui hai bisogno .
Felix Kling,

2
Controlla anche le altre domande precedentemente poste: stackoverflow.com/search?q=json+vs+xml
Felix Kling

16
Blarg! Questo è qualcosa che volevo davvero sapere, ed ero davvero contento che fosse qui, e le risposte erano PERFETTI. CATTIVO SU DI TE , se moderatori: forse è tempo di estendere i tuoi sentimenti di fidanzamento. Buon per te per avergli dato una risposta, almeno!
Mark Gerolimatos,

Non mi interessa se questo post è estremamente in ritardo sul gioco, ma sono d'accordo. Se una domanda è duplice, irrilevante o in conflitto con i termini di servizio, forse (il thread chiuso / inutile) non dovrebbe essere la prima cosa che emerge in una ricerca. (a proposito, questo è il secondo risultato [ingannato] che viene fuori) Sono d'accordo che forse le risposte dovrebbero essere snelle e concise, ma se il risultato dopo il risultato è un thread chiuso, senza risposta riempito con commenti off topic (che è contro i termini di utilizzo) quindi non aiuta nessuno.
Izaac Corbett,

2
Sebbene la domanda posta non sia chiara, questa NON è una domanda basata sull'opinione.
qwr,

Risposte:


221

Prima di rispondere a quando usare quale, un piccolo sfondo:

modifica: dovrei menzionare che questo confronto è davvero dal punto di vista del loro utilizzo in un browser con JavaScript. Non è il modo in cui entrambi i formati di dati devono essere utilizzati e ci sono molti buoni parser che cambieranno i dettagli per rendere ciò che sto dicendo non del tutto valido.

JSON è sia più compatto che (a mio avviso) più leggibile - in trasmissione può essere "più veloce" semplicemente perché vengono trasferiti meno dati.

Nell'analisi, dipende dal tuo parser. Un parser che trasforma il codice (sia esso JSON o XML) in una struttura di dati (come una mappa) può trarre vantaggio dalla natura rigorosa di XML ( gli schemi XML chiariscono bene la struttura dei dati) - tuttavia in JSON il tipo di un elemento (String / Numero / oggetto JSON nidificato) può essere dedotto sintatticamente, ad esempio:

myJSON = {"age" : 12,
          "name" : "Danielle"}

Il parser non ha bisogno di essere abbastanza intelligente da capire che 12rappresenta un numero (ed Danielleè una stringa come qualsiasi altra). Quindi in JavaScript possiamo fare:

anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False

In XML dovremmo fare qualcosa di simile al seguente:

<person>
    <age>12</age>
    <name>Danielle</name>
</person>

(a parte questo, illustra il fatto che XML è piuttosto più dettagliato, una preoccupazione per la trasmissione dei dati). Per utilizzare questi dati, li eseguiremo attraverso un parser, quindi dovremmo chiamare qualcosa del tipo:

myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True

In realtà, un buon parser potrebbe benissimo digitarlo ageper te (d'altra parte, potresti non volerlo). Cosa succede quando accediamo a questi dati è - invece di fare una ricerca degli attributi come nell'esempio JSON sopra - stiamo facendo una ricerca della mappa sulla chiave name. Potrebbe essere più intuitivo formare l'XML in questo modo:

<person name="Danielle" age="12" />

Ma dovremmo comunque effettuare ricerche di mappe per accedere ai nostri dati:

myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");

MODIFICA: Originale:

Nella maggior parte dei linguaggi di programmazione (non tutti, per ogni tratto) una ricerca di mappe come questa sarà più costosa di una ricerca di attributi (come abbiamo visto sopra quando abbiamo analizzato il JSON).

Questo è fuorviante: ricorda che in JavaScript (e altri linguaggi dinamici) non c'è differenza tra una ricerca di mappe e una ricerca di campo. In effetti, una ricerca sul campo è solo una ricerca sulla mappa.

Se si desidera un confronto davvero utile, la cosa migliore è fare un benchmark: fare i benchmark nel contesto in cui si prevede di utilizzare i dati.

Mentre scrivevo, Felix Kling ha già fornito una risposta abbastanza concisa confrontandola in termini di quando usarla, quindi non proseguirò più.


Solo una nota pedante ... Una ricerca nel campo JavaScript non è necessariamente una ricerca della mappa. Dipende dall'oggetto e dal campo in questione. Piccoli oggetti (in particolare quelli a cui non sono state associate proprietà dopo la costruzione) spesso utilizzavano "tipi veloci" ottimizzati con cache incorporate nei moderni motori JS e ricadono in sacchetti di proprietà più lenti (ricerche di mappe) per oggetti con un gran numero di proprietà o casi in cui una struttura di oggetti cambia frequentemente.
Brandon Paddock,

2
Trovo che JSON sia più facile da analizzare per gli umani, ma XML sia più facile da analizzare per i computer.
Jus12

5
Non è vero, ad esempio, in PHP, JSON usa json.so senza dipendenze a 78k, XML d'altra parte, ha bisogno di xml.so o xmlreader.so a 54k / 32k, ma richiede anche libxml2.so che 1.4megs . Più codice richiede più tempo per elaborare e utilizzare più memoria. Per non parlare, XML, a causa dei suoi nodi / struttura ad albero, ha riferimenti circolari, che possono essere una seccatura in qualsiasi linguaggio che non abbia riferimenti deboli. Ho trovato in diverse lingue che il parser XML è FAR più grande (occupa più memoria e utilizza più memoria) rispetto a qualsiasi dei loro parser JSON di controparte.
Rahly,

Perché mescoli il problema di stato rigoroso di JS a questo confronto non correlato? Riferendosi a segni doppi o triple uguali.
Atilkan,

1
@atilkan perché molti parser interpretano le stringhe numeriche come numeri o memorizzano i numeri come stringhe numeriche.
mazunki,

244

Più veloce non è un attributo di JSON o XML o un risultato che un confronto tra questi produrrebbe. Se presente, allora è un attributo dei parser o della larghezza di banda con cui si trasmettono i dati.

Ecco (l'inizio di) un elenco di vantaggi e svantaggi di JSON e XML:


JSON

Pro:

  • Sintassi semplice, che comporta un overhead di "markup" inferiore rispetto a XML.
  • Facile da usare con JavaScript poiché il markup è un sottoinsieme della notazione letterale dell'oggetto JS e ha gli stessi tipi di dati di base di JavaScript.
  • Schema JSON per la descrizione, il tipo di dati e la convalida della struttura
  • JsonPath per l'estrazione di informazioni in strutture profondamente annidate

con:

  • Sintassi semplice, sono supportati solo pochi tipi di dati diversi.

  • Nessun supporto per i commenti.


XML

Pro:

  • Markup generalizzato; è possibile creare "dialetti" per qualsiasi tipo di scopo
  • Schema XML per tipo di dati, convalida della struttura. Consente inoltre di creare nuovi tipi di dati
  • XSLT per trasformazione in diversi formati di output
  • XPath / XQuery per l'estrazione di informazioni in strutture profondamente annidate
  • supporto integrato per gli spazi dei nomi

con:

  • Relativamente prolisso rispetto a JSON (risulta in più dati per la stessa quantità di informazioni).

Quindi alla fine devi decidere di cosa hai bisogno . Ovviamente entrambi i formati hanno i loro casi d'uso legittimi. Se utilizzerai principalmente JavaScript, dovresti andare con JSON.

Sentiti libero di aggiungere pro e contro. Non sono un esperto XML;)


20
Un altro svantaggio per JSON e Pro per XML: JSON non supporta il riferimento agli oggetti (ciclico o meno), XML non lo supporta. XML lo fa forzando l' idattributo ad essere univoco all'interno del documento.
Earth Engine,

7
@EarthEngine Attualmente Json.Net ( json.codeplex.com ) supporta i riferimenti agli oggetti: james.newtonking.com/projects/json/help/index.html?topic=html/… .
Dmitrii Lobanov,

22
@DmitryLobanov: aggiungono solo alcune restrizioni aggiuntive allo standard JSON, ma non è riconosciuto da altri strumenti JSON. Quindi non è "nativo" per JSON. Tuttavia per XML, la restrizione è scritta nello standard, quindi è nativa.
Earth Engine,

1

5
JSON ha array incorporati, nonché valore "null". Mentre in XML hai bisogno di una sorta di convenzione tra i tuoi parser di schema. Esistono anche progetti di conversione simili a XSLT per JSON (ad esempio github.com/emlynoregan/bOTLjs )
Vasyl Boroviak,

22

La velocità di elaborazione potrebbe non essere l'unica questione rilevante, tuttavia, poiché questa è la domanda, ecco alcuni numeri in un benchmark: JSON vs. XML: alcuni numeri concreti sulla verbosità . Per la velocità, in questo semplice benchmark, XML presenta un overhead del 21% su JSON.

Una nota importante sulla verbosità, che è come dice l'articolo, il reclamo più comune: questo non è molto rilevante nella pratica (né i dati XML né JSON sono generalmente gestiti da umani, ma da macchine), anche se per la questione di velocità, richiede un po 'di tempo ragionevole per comprimere.

Inoltre, in questo benchmark, è stata elaborata una grande quantità di dati e un'applicazione Web tipica non trasmetterà blocchi di dati di dimensioni tali, fino a 90 MB, e la compressione potrebbe non essere vantaggiosa (per blocchi di dati abbastanza piccoli, un blocco compresso sarà più grande del pezzo non compresso), quindi non applicabile.

Tuttavia, se non è implicata alcuna compressione, JSON, come ovviamente terser, peserà meno sul canale di trasmissione, specialmente se trasmesso attraverso una connessione WebSocket, dove l'assenza del classico overhead HTTP può fare la differenza a vantaggio di JSON, anche di più significativo.

Dopo la trasmissione, i dati devono essere consumati e questo conta nel tempo complessivo di elaborazione. Se devono essere trasmessi dati abbastanza grandi o complessi, la mancanza di uno schema verificato automaticamente da un parser XML di convalida può richiedere un controllo più approfondito sui dati JSON; questi controlli dovrebbero essere eseguiti in JavaScript, che non è noto per essere particolarmente veloce, e quindi in questi casi potrebbe presentare un sovraccarico aggiuntivo su XML.

Ad ogni modo, solo i test forniranno la risposta per il tuo particolare caso d'uso (se la velocità è davvero l'unica cosa, e non standard, né sicurezza, né integrità ...).

Aggiornamento 1: vale la pena ricordare, è EXI, il formato XML binario, che offre la compressione a un costo inferiore rispetto all'utilizzo di Gzip e risparmia l'elaborazione altrimenti necessaria per decomprimere l'XML compresso. EXI è XML, ciò che BSON è JSON. Avere una rapida panoramica qui, con qualche riferimento all'efficienza sia nello spazio che nel tempo: EXI: l'ultimo standard binario? .

Aggiornamento 2: esiste anche un rapporto binario sulle prestazioni XML, condotto dal W3C, in quanto efficienza, memoria insufficiente e footprint della CPU, è un aspetto che interessa anche l'area XML: un'efficace valutazione dell'interscambio XML .

Aggiornamento 01-03-2015

Vale la pena di essere notato in questo contesto, poiché l'overhead HTTP è stato sollevato come un problema: lo IANA ha registrato la codifica EXI (l'efficiente codice binario XML sopra menzionato), come una codifica dei contenuti per il protocollo HTTP (insieme a compress , deflate e gzip ) . Ciò significa che EXI è un'opzione che può essere compresa dai browser probabilmente da altri client HTTP. Vedere i parametri del protocollo di trasferimento ipertestuale (iana.org) .


"Per la velocità, in questo semplice benchmark, XML presenta un overhead del 21% rispetto a JSON" - c'è una grande differenza nell'analisi JSON a seconda del parser specifico utilizzato. È quasi insignificante citare un particolare parser. Lo stesso per XML.
Jeffrey Blattman,

17

Ho trovato questo articolo al bazar digitale davvero interessante. Citando le loro citazioni da Norm:

Informazioni sui professionisti JSON:

Se tutto ciò che vuoi passare sono valori atomici o elenchi o hash di valori atomici, JSON ha molti dei vantaggi di XML: è facilmente utilizzabile su Internet, supporta un'ampia varietà di applicazioni, è facile scrivere programmi per elaborare JSON, ha poche funzionalità opzionali, è leggibile e ragionevolmente chiaro, il suo design è formale e conciso, i documenti JSON sono facili da creare e utilizza Unicode. ...

Informazioni sui professionisti XML:

XML si occupa in modo straordinario della piena ricchezza di dati non strutturati. Non sono affatto preoccupato per il futuro di XML, anche se la sua morte è celebrata allegramente da un gruppo di progettisti di API Web.

E non posso resistere a infilare un "Te l'ho detto!" token via nella mia scrivania. Non vedo l'ora di vedere cosa fanno le persone JSON quando viene loro chiesto di sviluppare API più ricche. Quando vogliono scambiare dati meno strutturati, li calcheranno su JSON? Vedo menzioni occasionali di un linguaggio di schema per JSON, seguiranno altre lingue? ...

Sono personalmente d'accordo con Norm. Penso che la maggior parte degli attacchi a XML provenga da sviluppatori Web per applicazioni tipiche e non da sviluppatori di integrazione. Ma questa è la mia opinione! ;)


Ben messo! Se l'80% degli sviluppatori attivi sono kavies javascript, l'80% esprimerà la loro opinione che JSON è "migliore". Ma chiunque usi linguaggi tipizzati è solo un po 'divertito per JSON. { "foo": 42 }Di che tipo è quell'oggetto? Quindi, per risolvere la mancanza di tipo, cose come questa si presentano: { "__type": "Bar", "foo": 42 }. In XML nel tipo di contrasto può essere connotato al nome dell'elemento: <Bar><foo>42</foo></Bar>. Solo ragazzi lisp e javascript come json;)
BitTickler

15

L'XML (extensible Markup Language) viene spesso utilizzato XHR perché si tratta di un linguaggio di trasmissione standard, che può essere utilizzato da qualsiasi linguaggio di programmazione, e supporta sia il server che il lato client, quindi questa è la soluzione più flessibile. L'XML può essere separato per più parti in modo che un gruppo specificato possa sviluppare la parte del programma, senza influire sulle altre parti. Il formato XML può anche essere determinato dal DTD XML o dallo Schema XML (XSL) e può essere testato.

JSON è un formato di scambio di dati che sta diventando sempre più popolare come il formato possibile delle applicazioni JavaScript. Fondamentalmente questa è una matrice di notazione di oggetti. JSON ha una sintassi molto semplice, quindi può essere facilmente appreso. E anche il supporto JavaScript che analizza JSON con la evalfunzione. D'altra parte, la evalfunzione ha aspetti negativi. Ad esempio, il programma può essere molto lento nell'analisi di JSON e, a causa della sicurezza, evalpuò essere molto rischioso. Questo non significa che JSON non sia buono, dobbiamo solo stare più attenti.

Il mio suggerimento è di usare JSON per applicazioni con leggero scambio di dati, come i giochi. Poiché non devi preoccuparti davvero del trattamento dei dati, questo è molto semplice e veloce.

L'XML è il migliore per i siti Web più grandi, ad esempio siti di shopping o qualcosa del genere. L'XML può essere più sicuro e chiaro. È possibile creare una struttura e uno schema di dati di base per testare facilmente la correzione e separarla facilmente in parti.

Ti suggerisco di utilizzare XML a causa della velocità e della sicurezza, ma JSON per roba leggera.


Non sto effettuando il downvoting ma sono curioso di vedere come JSON sia un payload più pesante o più lento in generale. È possibile applicare GZip / Deflate. La sua sintassi lo rende intrinsecamente più piccolo in termini di byte. JSON può anche definire il suo schema come un contratto ed essere facilmente serializzato come tale.
Anthony Mason,

JSON non ha bisogno di essere valutato per essere analizzato.
Yay295

7

L'importante di JSON è mantenere crittografato il trasferimento dei dati per motivi di sicurezza. Non c'è dubbio che JSON è molto più veloce di XML. Ho visto XML impiegare 100 ms, mentre JSON ha impiegato solo 60 ms. I dati JSON sono facili da manipolare.


5
Sono d'accordo, JSON vince la battaglia sul trasferimento dei dati ma manca di markup, validazione ed estensione degli elementi. Questo è il motivo per cui Google
crawem

1
La Sitemap è stata definita prima che Json fosse popolare, quindi non è il miglior esempio. La Sitemap è anche vista come server a server in cui XML è più popolare di JSON. (JSON è davvero solo perché popolare perché è facile lavorare con JavaScript.)
Matthew Whited,

ma Google AMP utilizza json e non xml
Ashraf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.