Warum entscheiden sich alle für JSON über XML für jQuery? [geschlossen]


155

Ich dachte, XML ist sehr portabel und kann als Minidatenbank verwendet werden. Ich habe gesehen, dass XML überall verwendet wird. Ich sehe sogar große Unternehmen, die zu JSON wechseln . Sogar Microsoft hat Unterstützung für JSON integriert. Was ist der ganze Hype um JSON?


14
"Jeder" und "Überall" sind solche absoluten Begriffe ...
Matthew Groves

73
@eliben XML saugt eigentlich nicht. Es ist sehr mächtig, aber genau wie die Jagd auf Kaninchen mit einem Raketenwerfer ist es möglicherweise nicht immer die beste Option.
Dan

20
Das meiste, wofür die Leute derzeit XML verwenden, wäre in JSON
MGOwen

39
@ Dan Wenn nur XML so viel Spaß machen würde wie die Jagd auf Kaninchen mit einem Raketenwerfer (vermutlich - ich kann nicht sagen, dass ich es selbst versucht habe)
David Johnstone

4
weil es 'Die fettfreie Alternative zu XML' ist -json.org
DMin

Antworten:


226

Da JSON von JavaScript nativ erkannt wird, ist es im Grunde genommen sehr leicht, minimalistisch und sehr portabel, da es nur auf zwei grundlegenden Strukturen beruht:

  • Eine Sammlung von Name / Wert-Paaren. In verschiedenen Sprachen wird dies als Objekt, Datensatz, Struktur, Wörterbuch, Hash-Tabelle, Schlüsselliste oder assoziatives Array realisiert.
  • Eine geordnete Liste von Werten. In den meisten Sprachen wird dies als Array, Vektor, Liste oder Sequenz realisiert.

3
+1 .. wirklich .. so viele verschiedene Datentypen unterstützen viel im Vergleich zu rohem XML-Text
Xinus

48
+1, zumal das JSON-Parsing im Vergleich zum XML-Parsing sogar stückweise unglaublich effizienter ist. Sobald die Datensätze, die Sie interessieren, einen bestimmten (und erschreckend kleinen) Schwellenwert überschreiten, ist der Leistungsunterschied spürbar.
Magsol

1
Jemand zeigt mir Daten, die besagen, dass JSON-Parsing in modernen Browsern schneller ist als XML. Eine Antwort auf SO hier sagt etwas anderes: stackoverflow.com/questions/4596465/…
HDave

136

XML beginnt erst dann wirklich zu leuchten, wenn Sie verschiedene Namespace-Schemas miteinander mischen. Dann fällt JSON allmählich ab. Wenn Sie jedoch nur ein Serialisierungsformat für Ihre Daten benötigen, ist JSON kleiner, leichter, besser lesbar und im Allgemeinen schneller als XML.


31
+1, um zu zeigen, wofür XML wirklich nützlich ist. Zu oft verwenden Menschen XML, selbst wenn sie mit etwas viel Einfacherem auskommen könnten.
Daniel Pryden

1
Ja, ich muss hier mit JCD und Daniel übereinstimmen. Qualitätsantwort darauf, warum XML für einige Dinge immer noch ziemlich gut ist.
Bekannter Bürger

3
Wie XML weniger lesbar ist, finde ich es fast unmöglich, json zu lesen, wo ich denke, dass die Hierarchie von XML viel verständlicher ist (sicherlich ein wenig wortreich). Vielleicht habe ich einfach nicht genug mit JSON gearbeitet
Colton

Namespaces sind eine XML-Lösung, um bestimmte Probleme zu lösen, wenn Sie Dinge mit XML tun. Wenn Sie json verwenden, finden Sie eine json- Lösung, um dieselben Probleme auf json-Weise zu lösen. Für mich ist das Namespaces-Argument wie "Oh! Aber json hat keine Attribute!"
Redben

61

Ich finde, dass ein großer Vorteil von JSON gegenüber XML darin besteht, dass ich mich nicht entscheiden muss, wie die Daten formatiert werden sollen. Wie einige gezeigt haben, gibt es zahlreiche Möglichkeiten, selbst einfache Datenstrukturen in XML zu erstellen - als Elemente, als Attributwerte usw. Dann müssen Sie es dokumentieren, ein XML-Schema schreiben oder NG oder einen anderen Mist entspannen ... Es ist ein Durcheinander.

XML mag seine Vorzüge haben, aber für den grundlegenden Datenaustausch ist JSON viel kompakter und direkter. Als Python-Entwickler gibt es keine Impedanzfehlanpassung zwischen den einfachen Datentypen in JSON und in Python. Wenn ich also einen serverseitigen Handler für eine AJAX-Abfrage schreiben würde, in der nach den Schneebedingungen für ein bestimmtes Skigebiet gefragt wird, würde ich ein Wörterbuch wie folgt erstellen:

conditions = {
    'new_snow_24': 5.0,
    'new_snow_48': 8.5,
    'base_depth': 88.0,
    'comments': 'Deep and steep!',
    'chains_required': True,
}
return simplejson.dumps(conditions)   # Encode and dump `conditions` as a JSON string

Bei der Übersetzung über JSON (unter Verwendung einer Bibliothek wie 'simplejson' für Python) sieht die resultierende JSON-Struktur nahezu identisch aus (außer in JSON werden Boolesche Werte in Kleinbuchstaben geschrieben).

Das Dekodieren dieser Struktur erfordert nur einen JSON-Parser, unabhängig davon, ob es sich um Javascript oder Objective-C für eine native iPhone-App oder C # oder einen Python-Client handelt. Die Floats würden als Floats interpretiert, die Strings als Strings und die Booleschen als Boolesche Werte. Bei Verwendung der 'simplejson'-Bibliothek in Python simplejson.loads(some_json_string)würde mir eine Anweisung eine vollständige Datenstruktur zurückgeben, wie ich sie gerade im obigen Beispiel erstellt habe.

Wenn ich XML schreiben würde, müsste ich mich entscheiden, ob ich Elemente oder Attribute ausführen möchte. Beide folgenden Punkte sind gültig:

<conditions>
    <new-snow-24>5</new-snow-24>
    <new-snow-48>8.5</new-snow-48>
    <chains-required>yes</chains-required>
    <comments>deep and steep!</comments>
</conditions>

<conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes">
   <comments>deep and steep!</comments>
</conditions>

Ich muss also nicht nur über die Daten nachdenken, die ich möglicherweise an den Client senden möchte, sondern auch darüber, wie ich sie formatieren soll. XML ist zwar einfacher als einfaches SGML, da es strengere Regeln enthält, bietet jedoch zu viele Möglichkeiten, um über diese Daten nachzudenken. Dann müsste ich es generieren. Ich konnte nicht einfach ein Python-Wörterbuch (oder eine andere einfache Datenstruktur) nehmen und sagen: "Mach dich selbst zu meinem XML". Ich konnte kein XML-Dokument erhalten und sofort sagen, dass Sie sich in Objekte und Datenstrukturen verwandeln sollen, ohne einen benutzerdefinierten Parser zu schreiben oder ohne den zusätzlichen Aufwand für XML Schema / Relax NG und andere solche Probleme zu erfordern.

Das kurze daran ist, dass es viel einfacher und direkter ist, Daten in JSON zu kodieren und zu dekodieren, insbesondere für den schnellen Austausch. Dies gilt möglicherweise eher für Personen mit einem dynamischen Sprachhintergrund, da die in JavaScript / JSON integrierten Basisdatentypen (Listen, Wörterbücher usw.) direkt denselben oder ähnlichen Datentypen in Python, Perl, Ruby usw. zugeordnet sind.


34

Die Leistung von JSON unterscheidet sich in den meisten Anwendungsfällen nicht wesentlich von XML. JSON ist für gut verschachtelte Strukturen nicht gut geeignet und lesbar. Sie werden auf]]]}] stoßen, was das Debuggen schwierig macht


31

Es ist leicht im Vergleich zu XML. Wenn Sie skalieren müssen, reduzieren Sie Ihren Bandbreitenbedarf!

Vergleiche JSON

 [
      {
           color: "red",
           value: "#f00"
      },
      {
           color: "green",
           value: "#0f0"
      },
      {
           color: "blue",
           value: "#00f"
      },
      {
           color: "cyan",
           value: "#0ff"
      },
      {
           color: "magenta",
           value: "#f0f"
      },
      {
           color: "yellow",
           value: "#ff0"
      },
      {
           color: "black",
           value: "#000"
      }
 ]

zu XML:

 <colors>
      <color >
           <name>red</name>
           <value>#f00</value>
      </color>
      <color >
           <name>green</name>
           <value>#0f0</value>
      </color>
      <color >
           <name>blue</name>
           <value>#00f</value>
      </color>
      <color >
           <name>cyan</name>
           <value>#0ff</value>
      </color>
      <color >
           <name>magenta</name>
           <value>#f0f</value>
      </color>
      <color >
           <name>yellow</name>
           <value>#ff0</value>
      </color>
      <color >
           <name>black</name>
           <value>#000</value>
      </color>
 </colors>

23
nicht nur kleiner, sondern auch menschenfreundlicher. XML sieht aus wie ein schlechter Versuch eines Menschen, wie ein Computer zu sprechen.
Deft_code

15
Ihr XML kann auch das XML mit Attributen anstelle von Elementen für einfache Typen (Name / Wert)
reduzieren

4
@ Matthew: Ja, aber dann sieht es inkonsistent und hässlich aus. Und Sie benötigen noch Open / Close-Tags für das Element. JSON halbiert (bestenfalls) die Anzahl der Tags, die Sie verwenden müssen.
Ron Gejman

2
Schauen Sie sich Marc's Beispiel an. Ich sehe nicht, wie Ihre Version leichter zu lesen ist als seine. stackoverflow.com/questions/1743532/…
Matthew Whited

1
Unterschied ist Länge scheint mir nicht so groß
vtd-xml-author

28

Nur eine Anekdote aus meiner persönlichen Erfahrung:

Ich habe ein kleines Javascript-Verzeichnis geschrieben, zuerst mit den Daten in XML, und es dann für die Verwendung von JSON angepasst, damit ich sie nebeneinander ausführen und die Geschwindigkeit mit Firebug vergleichen kann. Der JSON war ungefähr dreimal schneller (350-400 ms gegenüber 1200-1300 ms, um alle Daten anzuzeigen). Wie andere angemerkt haben, ist der JSON auch viel augenschonender und die Dateigröße war aufgrund des schlankeren Markups gut 25% kleiner.


2
Wenn alle diese Benchmarks erstellen würden, hätten wir jedoch nichts zu streiten.
HDave

20
 <colors>
      <color name='red'     value='#f00'/>
      <color name='green'   value='#0f0'/>
      <color name='blue'    value='#00f'/>
      <color name='cyan'    value='#0ff'/>
      <color name='magenta' value='#f0f'/>
      <color name='yellow'  value='#ff0'/>
      <color name='black'   value='#000'/>
 </colors>

Mit Attributen ist XML nett. Aus irgendeinem Grund besteht hausgemachtes XML im Allgemeinen zu 100% aus Elementen und ist hässlich.


2
Das sind immer noch mehr Nicht-Leerzeichen als im JSON-Beispiel. Und das Parsen von Attributen kann in XML ärgerlicher sein.
jmucchiello

4
Wahrscheinlich, weil komplexe Typen wirklich nur in Elementen beschrieben werden können, so dass die meisten Tools standardmäßig verwendet werden. Ich bin damit einverstanden, dass dieses XML sehr einfach zu verwenden und zu lesen ist.
Matthew Whited

18

Der einfache Verbrauch durch JavaScript kann einer der Gründe sein.


6
Das ist der große Grund, warum ich es benutze. Das manuelle Parsen von XML ist albtraumhaft komplex. Da ich Python verwende, um den JSON zu erstellen, behandeln sie Daten und Objekte auf sehr ähnliche Weise, was bedeutet, dass das Hin- und Her-Serialisieren alles glücklich macht!
RandomInsano

10

JSON eignet sich aufgrund seiner Größe und Benutzerfreundlichkeit am besten für die Verwendung von Daten in Webanwendungen von Webservices, insbesondere aufgrund der integrierten Unterstützung in JavaScript . Stellen Sie sich den Rechenaufwand für das Parsen eines XML-Fragments im Vergleich zur sofortigen Suche in JSON vor.

Ein sehr gutes Beispiel ist JSON-P. Sie können Daten von einem Webservice zurückerhalten, der in einen Rückruffunktionsaufruf eingebunden ist, z. B. my_callback({"color": "blue", "shape":"square"});in einem dynamisch generierten <script>Tag, damit die Daten direkt in der Funktion verwendet werden können my_callback(). Es gibt keine Möglichkeit, mit XML an diese Annehmlichkeit heranzukommen.

XML ist das Format der Wahl für große Dokumente, bei denen Sie ein Framework zum Rendern von Datenseiten in mehreren Formaten mit XSLT haben. XML kann unter anderem auch mit Anwendungskonfigurationsdateien zur besseren Lesbarkeit verwendet werden.


8

Niemand hier hat den Hauptvorteil von XML erwähnt: Validierungsregeln (DTD, XSD). Meine Schlussfolgerungen, nachdem ich beide verwendet habe:

  • JSON ist perfekt für Ajax, insbesondere wenn Sie sowohl die Server- als auch die Clientseite selbst entwickeln. Grundsätzlich erstellen Sie js-Objekte direkt in Ihrem Serverskript!
  • XML glänzt in Unternehmensumgebungen, wenn Sie Datenaustauschstandards zwischen großen bürokratischen Organisationen festlegen müssen. Oft entwickelt eine Partei ihren Teil Monate vor der anderen, sodass sie wirklich von der Validierung ihrer Anfragen gegen vereinbarte XSD profitiert. In großen Unternehmen wird die Datenübertragung häufig zwischen verschiedenen Systemen übersetzt. Dies ist auch die Stärke von XML, denken Sie an XSLT. Beispiel: Codefreie Konvertierung in JSON: p

Natürlich wird ein JSON-Schema entwickelt, aber Sie werden nirgendwo eine integrierte Unterstützung dafür finden.

Ich bin ein Fan von beiden, sie haben nur unterschiedliche Stärken.


6

Da es für die meisten Sprachen JSON-Codierer und -Decodierer gibt, gibt es keinen Grund, JSON NICHT für Anwendungen zu verwenden, bei denen dies sinnvoll ist (und das sind wahrscheinlich 90% der Anwendungsfälle für XML).

Ich habe sogar von JSON-Zeichenfolgen gehört, die in großen SQL-Datenbanken verwendet werden, um Schemaänderungen zu vereinfachen.


5

Ganz ehrlich, es gibt nicht so viele Unterschiede zwischen JSON und XML, da sie alle Arten von Daten darstellen können. XML ist jedoch syntaktisch größer als JSON und daher schwerer als JSON.


1
Ich fand Ihre Antwort nicht besonders inspirierend, aber es war nicht falsch, so dass eine Abwertung ungerecht schien.
Deft_code

+1 für die Angabe, dass XML so verwendet werden kann, dass es eine richtige Obermenge von JSON ist.
Sebastian

5

JSON weist keine Impedanzfehlanpassung mit der JavaScript-Programmierung auf. JSON kann Ganzzahlen, Zeichenfolgen, Listen und Arrays enthalten. XML besteht nur aus Elementen und Knoten, die in Ganzzahlen usw. analysiert werden müssen, bevor sie verwendet werden können.


Die Notwendigkeit, Elemente zu analysieren, entspricht nicht einer Impedanzfehlanpassung.
Rob

9
Eine Impedanzfehlanpassung liegt vor, wenn Konzepte nicht sauber von einem Format in ein anderes abgebildet werden, wie bei der objektrelationalen Zuordnung. Einige Dinge sind mit Objekten sehr einfach auszudrücken, aber mit SQL schwer, während andere Dinge mit SQL leicht auszudrücken sind, aber Objekthierarchien haben Schwierigkeiten, sie klar auszudrücken. Bei XML und JSON erfordert einer oft etwas mehr Arbeit, um zur Bedeutung zu gelangen als der andere, aber das hängt wirklich von den Parsing-Tools ab. Die Ausdruckskraft ist (meistens) gleich.
JCDyer

4

Beide sind großartig und sehr tragbar. JSON hat jedoch an Popularität gewonnen, da es in den meisten Fällen in weniger Zeichen serialisiert wird (was sich in einer schnelleren Lieferzeit niederschlägt) und da es mit der JavaScript-Objektsyntax übereinstimmt, kann es direkt in ein In-Memory-Objekt übersetzt werden, was Ajax erheblich vereinfacht implementieren.

XML ist immer noch großartig. JSON ist im Vergleich zu XML nur das "Neueste und Beste".


1
Und ich glaube, dass neuere Versionen von JavaScript allmählich "sichere" (eval-freie) integrierte JSON-Encoder und -Decoder enthalten.
Nosredna

4

Mit JavaScript leicht zu analysieren und leichtgewichtig (ein Dokument in JSON ist kleiner als ein XML-Dokument, das dieselben Daten enthält.)


3

JSON ist effektiv serialisiertes JavaScript, indem Sie (aJsonString) direkt in ein JavaScript-Objekt auswerten können. Innerhalb eines Browsers ist es ein Kinderspiel. JSON ist perfekt für JavaScript geeignet. Gleichzeitig ist JavaScript eine sehr lose typisierte dynamische Sprache und kann nicht alle spezifischen Typinformationen nutzen, die in einem Xml / Xsd-Dokument verfügbar sind. Diese zusätzlichen Metadaten (die sich hervorragend für die Interoperabilität eignen) behindern JavaScript und machen die Arbeit langwieriger und umständlicher.

Größe gegen Leistung

Wenn Sie sich in einem Browser befinden, lässt sich JSON schneller serialisieren / deserialisieren, da es einfacher, kompakter und vor allem nativ unterstützt wird. Ich habe einige Benchmarks für die Northwind-Datenbank verfügbar , die die Größe und Geschwindigkeit zwischen den verschiedenen verfügbaren Serializern vergleichen. In der Basisklassenbibliothek ist der XML DataContract-Serializer von Microsoft über 30% schneller als der JSON- Serializer . Dies hat zwar mehr mit dem Aufwand zu tun, den Microsoft in den XML-Serializer gesteckt hat, da ich einen JsonSerializer entwickeln konnte , der mehr als 2,6- mal schneller ist als der XML- Serializer . Bei Nutzdaten, die auf den Benchmarks basieren, sieht es so aus, als ob XML ungefähr mehr als das Zweifache beträgtdie Größe von JSON. Dies kann jedoch schnell zum Erliegen kommen, wenn Ihre XML-Nutzdaten viele verschiedene Namespaces innerhalb desselben Dokuments verwenden.


2

XML ist in den meisten Situationen aufgeblähtes Schlangenöl. JSON bietet Ihnen die meisten Vorteile ohne Aufblähen.


1

Ein großer Vorteil außer den hier genannten. Für dieselben Daten gibt es mehrere Möglichkeiten, sie als XML-Datei darzustellen, aber nur eine Möglichkeit mit JSON, um Mehrdeutigkeiten zu beseitigen :)


2
{"colors":["red","green","blue"],"systems":["windows","mac"]}vs.{"entries":[{"type":"color","value":"red"},{"type":"system","value":"mac"}]}
Jerome Baum

0

Ich bin bei weitem kein Experte, aber von den verschiedenen Unternehmen, für die ich gearbeitet habe, verwenden wir XML im Allgemeinen in kleinen Datenumgebungen oder Konfigurationswerten (web.config ist ein gutes Beispiel).

Wenn Sie über große Datenmengen verfügen, möchten Sie im Allgemeinen über diese Daten berichten. Und XML ist keine großartige Quelle für Berichte. Im Großen und Ganzen scheint es, als sei eine Transaktionsdatenbank einfacher zu melden / zu suchen als XML.

Macht das Sinn? Wie ich oben sagte, bin ich kein Experte, aber meiner Erfahrung nach scheint dies der Fall zu sein. Ich glaube auch, dass Microsoft die JSON-Unterstützung integriert hat, da Entwickler häufig auf clientseitige oder skriptbasierte Aktionen umsteigen, um die visuelle Darstellung der Benutzeroberfläche ( Ajax ) zu verbessern. Microsoft Ajax wurde nicht so häufig verwendet wie andere Bibliotheken wie jQuery und MooTools ( Yahoo YUI ist auch in dieser Mischung) aufgrund ihrer schönen Integration von serialisierbaren Objekten mit JSON.

Ich schreibe jetzt Code, der den JSON-Serializer in meinem VB-Code implementiert. Es ist viel zu einfach und vom Standpunkt des Upgrades / Modifizierens aus kann man es nicht übertreffen. Es ist Microsofts Art, uns von VS abhängig zu machen, denke ich. Ich habe kürzlich eine Unternehmensanwendung auf Ajax (über jQuery) und das JSON-Format konvertiert. Es dauerte ungefähr 2 Wochen, um dies zu tun. Ich danke Microsoft tatsächlich für die Integration, denn ohne sie hätte ich ziemlich viel zusätzlichen Code schreiben müssen.


Ich denke, es gab einige Verwirrung über die Frage und diese Antwort enthält viele Spekulationen.
März 75

@ Eric P: absolut nichts falsch mit VB.
Taptronic
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.