2009-02-25 18 views

risposta

17

In sintesi, JSON (che può essere considerato un sottoinsieme di JavaScript) è molto più snello di XML. Questo ha diversi effetti collaterali positivi

  • JSON è più piccolo di corrispondente XML
  • JSON è più veloce, vale a dire la sintassi più semplice -> più facile l'analisi (parsing più veloce)

Nella mia risposta originale a questa domanda, la mia visione di JSON era quella di JavaScript, l'ho considerato un parente stretto. Ma JSON è qualcosa di indipendente e JSON.org fa un ottimo lavoro nel descrivere JSON. Fornisce inoltre una libreria di compatibilità per JavaScript che aggiunge il supporto per e JSON.stringify quando non è supportato dai browser.

Mentre eval all'epoca (metà 2009) veniva utilizzato per valutare JavaScript, poteva anche valutare JSON, cioè analizzare JSON, ma era considerato non sicuro, in quanto consentiva l'esecuzione arbitraria di JavaScript al suo posto.

JSON è un ottimo abbinamento per i browser e un modo naturale per evolvere la piattaforma grazie alla stretta relazione con JavaScript.

Mentre XML può essere considerato un migliore rigore dovuto al fatto che è possibile digitarlo, sono anche quelle cose che lo rendono molto più lento (è anche un po 'prolisso a mio parere). Ma se questo è qualcosa che vuoi veramente, dovresti usarlo, XML è ugualmente onnipresente.

Non entrerò in un dibattito su dinamico o tipizzato staticamente, ma dirò questo. È davvero facile aggiungere roba su dati senza schema e ci sono molti modi per fare la validazione, indipendentemente dallo schema o dallo schema.

+0

In che modo JSON è più adatto di XML per rappresentare il contenuto dinamico? – Guillaume

+1

@John: stai mescolando l'analisi con l'esecuzione. Sono due animali diversi. – dirkgently

+1

@Guillaume e dirkgently - JSON è molto più semplice con cui lavorare in combinazione con lo scripting del browser. Più adatto per inviare dati al cliente. Mi piace pensare a JSON come JavaScript specializzato perché mi consente di emettere un comportamento dal codice lato-lato che non è ordinato con XML. –

1

Si consiglia di leggere JSON: The Fat-Free Alternative to XML. Con JSON puoi scherzare con i callback avanti e indietro tra l'origine e la destinazione di una richiesta e utilizzarla in modo indolore nel tuo codice Javascript esistente.

+0

Il collegamento è interrotto (almeno per me .. .) –

+0

@ido: prova json.org – dirkgently

1

Il collegamento fornisce in modo diretto una buona sinossi delle differenze (scorrere verso il basso). Punti importanti sono:

JSON: più piccolo, può rappresentare tutti i caratteri unicode (xml non può in UTF8, almeno, con le proprie specifiche). È anche banale utilizzarlo nelle applicazioni AJAX (a causa della funzione eval() di javascript), in particolare le funzionalità più avanzate come jsonp (le risposte richiamano i callback).

XML: ha molti strumenti per rendere semplice l'interrogazione della sua struttura. Dal momento che è più vecchio e più consolidato, ha anche più supporto per gli strumenti in generale.

In generale, possono eseguire le stesse operazioni (è possibile eseguire jsonp tramite xml, richiederebbe solo manualmente il parsing del callback).

+0

Non sono d'accordo con la tua affermazione che XML non può rappresentare tutti i caratteri Unicode. È sufficiente impostare la codifica su Unicode ("UTF-16"). Guarda come: http://www.w3schools.com/xml/xml_encoding.asp – MikeTeeVee

+0

Wow, questo è da un po 'di tempo fa :). Non ci sono caratteri esplicitamente vietati in XML? Mi sembra di ricordare qualche sovrapposizione tra quelli e l'utf8 di sicuro, non sono sicuro di utf16. Ho aggiornato la mia risposta per riflettere che è, almeno, utf8. –

8

che avete in questo articolo "The AJAX response: XML, HTML, or JSON?" un dibattito su questo argomento:

XML

  • Vantaggi
    Il vantaggio più importante di XML è che è il più formato facilmente leggibile per altri umani.
    Un vantaggio secondario è che XML esiste da un po 'di tempo e che molti sviluppatori sono già abituati.
  • Svantaggi
    Il codice JavaScript necessario per inserire i dati nella pagina HTML è piuttosto dettagliato.

JSON

  • Vantaggi
    Il vantaggio più importante è che JSON elude la politica dello stesso fonte di JavaScript, se si importa il file JSON come un nuovo <script> tag. Vedi Simon Willison's example per i dettagli sanguinosi.
    JavaScript non consente di accedere ai documenti (siano essi XML o HTML) provenienti da un altro server. Tuttavia, se si importa un file JSON come tag di script si aggira questo problema e qualsiasi dato JSON può essere importato in qualsiasi sito Web. Dipende dai tuoi obiettivi di business se questa è una buona o una brutta cosa, ma al momento è l'unico formato di dati che consente l'accesso illimitato.
    Un vantaggio secondario è che gli script per i dati JSON sono leggermente più semplici e leggermente più in linea con il resto del linguaggio JavaScript rispetto agli script per i dati XML.
  • Svantaggi
    Lo svantaggio più importante di JSON è che il formato è molto difficile da leggere per gli esseri umani, e che, naturalmente, ogni singola virgola, citazione, e la staffa dovrebbe essere esattamente nel posto giusto. Anche se questo è vero anche per XML, il welter di JSON di sintassi dall'aspetto complicato, come il}}] alla fine dello snippet di dati, può spaventare i neofiti e rendere complicato il debug.

Dai commenti, JSON è considerato più veloce da elaborare rispetto all'XML.

+0

Non c'è motivo per cui l'inserimento di XML nel DOM debba essere difficile, se il progetto sul lato server tiene conto di tale comportamento. Un piccolo lavoro di progettazione sul lato server può ridurre notevolmente lo sforzo del browser. –

+0

Un tale punto ridicolo; JSON è difficile da leggere per gli umani? Stai ancora seriamente usando questo come risposta? JSON è incredibilmente più facile dell'XML da leggere per gli umani; fatto universale. Non posso credere a quanto sia idiota questa affermazione! Lo schema – TheBlackBenzKid

17

Un vantaggio di XML che non ho visto in questa discussione è che XML può avere uno schema. Questo è di grande valore nel descrivere la struttura dell'XML. Per una struttura dati semplice, JSON e un po 'di testo che descrive ciò che stai facendo va bene. Quando si lavora con strutture dati più complesse, o quando il creatore e i consumatori dei dati non sono la stessa squadra, avere uno Schema può aiutare molto la comunicazione.

Inoltre, avere uno schema significa che è possibile convalidare i dati, che può essere salvavita quando si cerca di eseguire il debug di errori complexe ...

+0

non è sempre strettamente necessario, specialmente per NoSQL! –

2

Mentre mi piace JSON e lo consiglio, penso che non c'è differenza fondamentale tra velocità di elaborazione ottimale. Le differenze tra le librerie e le piattaforme sono più significative: un buon parser xml è più veloce di un parser json cattivo e viceversa. Quindi di solito le prestazioni dei formati non sono un fattore importante. Entrambi possono essere illuminati rapidamente (Java ha alcuni parser buoni per entrambi, ad esempio, anche in altri linguaggi).

Per quanto riguarda la compattezza, che dipende dal tipo di dati, Json è spesso un po 'più compatto, ma non in modo radicale. Tranne se hai un sacco di matrici/liste, dove la notazione json "{...}" è molto più compatta rispetto alla codifica xml (a meno che tu non usi lo spazio bianco se possibile, come "1 2 3 4").

5

Un vantaggio di XML che non è stato ancora menzionato è che è possibile utilizzare XSLT per estrarre dati da un documento XML utilizzando espressioni XPath arbitrariamente complesse. Non riesco a vedere un modo per farlo in JSON. Come troveresti tutti gli oggetti in un documento JSON che contengono un campo "valuta" come discendente diretto, indipendentemente da dove si trovano gli oggetti nella struttura? In XML con XSLT/XPath questo è molto facile.

Tuttavia, farlo nel browser ha un prezzo. Si verificheranno stranezze specifiche del browser e sarà probabilmente più lento e più impegnativo in termini di memoria.

+1

* "Come troveresti tutti gli oggetti in un documento JSON che contengono un campo" valuta "come discendente diretto, indipendentemente da dove si trovano gli oggetti nella struttura?" * Allo stesso modo di un trasformatore XSLT, camminando sulla struttura e trovandoli. Solo perché non esiste un noto trasformatore JSON non significa che non ci possa essere o che sarebbe meno utile della versione XML. –

0

Penso che un altro vantaggio di Json sia che non utilizza le parentesi <> e si può inserire il codice html in esso senza molta confusione.

0

JSON è leggero, AJAX amichevole (considerato come sottoinsieme di Javascript) e facilmente serializzabile. XML fare tutto questo ma dopo aver bevuto un po 'di latte.

Problemi correlati