JSON- und XML-Vergleich [geschlossen]

273

Ich möchte wissen, was schneller ist: XML und JSON? Wann welches verwenden?

Durga Dutt
quelle
60
Schneller wo? Übertragung? Wird bearbeitet? Erstellen? Beide haben keine Füße, die Sie kennen. Es ist wahrscheinlich, dass JSON in irgendeiner Weise "schneller" ist, da es weniger Markup-Overhead hat. Auf der anderen Seite bietet XML XMLSchema, um die Gültigkeit von Typen, Strukturen usw. sicherzustellen. Es gibt XSLT, um XML in fast jedes andere Ausgabeformat zu transformieren ... Es hängt davon ab, was Sie benötigen .
Felix Kling
2
Überprüfen Sie auch andere zuvor gestellte Fragen: stackoverflow.com/search?q=json+vs+xml
Felix Kling
16
BLARG! Das wollte ich unbedingt wissen und war wirklich froh, dass es hier war, und die Antworten waren PERFEKT. BAD ON YOU , se Moderatoren: Vielleicht ist es an der Zeit, Ihr Engagement zu verlängern. Gut, dass Sie es zumindest beantworten lassen!
Mark Gerolimatos
Es ist mir egal, ob dieser Beitrag extrem spät zum Spiel kommt, aber ich stimme zu. Wenn eine Frage betrogen, irrelevant oder im Widerspruch zu den Nutzungsbedingungen steht, sollte (der geschlossene / nutzlose Thread) möglicherweise nicht das erste sein, was bei einer Suche auftaucht. (Übrigens, dies ist das 2. [betrogene] Ergebnis, das auftaucht) Ich stimme zu, dass die Antworten vielleicht schlank und prägnant sein sollten, aber wenn das Ergebnis nach dem Ergebnis ein geschlossener, unbeantworteter Thread ist, der mit Kommentaren außerhalb des Themas gefüllt ist (was gegen die Nutzungsbedingungen verstößt), dann es hilft niemandem.
Izaac Corbett
2
Obwohl die gestellte Frage unklar ist, handelt es sich NICHT um eine meinungsbasierte Frage.
qwr

Antworten:

221

Bevor Sie antworten, wann Sie welche verwenden sollen, ein kleiner Hintergrund:

edit: Ich sollte erwähnen, dass dieser Vergleich wirklich aus der Perspektive der Verwendung in einem Browser mit JavaScript ist. Es ist nicht die Art und Weise entweder Datenformat hat verwendet werden, und es gibt viele gute Parser , die die Details ändern zu machen , was ich sage nicht ganz gültig.

JSON ist sowohl kompakter als auch (meiner Ansicht nach) lesbarer - bei der Übertragung kann es "schneller" sein, einfach weil weniger Daten übertragen werden.

Beim Parsen hängt es von Ihrem Parser ab. Ein Parser, der den Code (sei es JSON oder XML) in eine Datenstruktur (wie eine Karte) umwandelt, kann von der strengen Natur von XML profitieren ( XML-Schemata unterscheiden die Datenstruktur gut) - in JSON jedoch vom Typ eines Elements (String / Number / Nested JSON Object) kann syntaktisch abgeleitet werden, z.

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

Der Parser muss nicht intelligent genug sein, um zu erkennen, dass 12er eine Zahl darstellt (und Danielleeine Zeichenfolge wie jede andere ist). In Javascript können wir also Folgendes tun:

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

In XML müssten wir ungefähr Folgendes tun:

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

(Abgesehen davon zeigt dies den Punkt, dass XML eher ausführlich ist; ein Problem für die Datenübertragung). Um diese Daten zu verwenden, würden wir sie durch einen Parser laufen lassen, dann müssten wir etwas aufrufen wie:

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

Tatsächlich könnte ein guter Parser das agefür Sie eingeben (andererseits möchten Sie es möglicherweise nicht). Wenn wir auf diese Daten zugreifen, wird anstelle einer Attributsuche wie im obigen JSON-Beispiel eine Kartensuche für den Schlüssel durchgeführt name. Es könnte intuitiver sein, das XML folgendermaßen zu erstellen:

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

Wir müssten jedoch noch Kartensuchen durchführen, um auf unsere Daten zugreifen zu können:

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

EDIT: Original:

In den meisten Programmiersprachen (nicht in jedem Fall) ist eine solche Kartensuche teurer als eine Attributsuche (wie wir sie oben beim Parsen des JSON erhalten haben).

Dies ist irreführend: Denken Sie daran, dass es in JavaScript (und anderen dynamischen Sprachen) keinen Unterschied zwischen einer Kartensuche und einer Feldsuche gibt. In der Tat, ein Feld Lookup ist nur eine Karte Lookup.

Wenn Sie einen wirklich lohnenden Vergleich wünschen, ist es am besten, ihn zu vergleichen - führen Sie die Benchmarks in dem Kontext durch, in dem Sie die Daten verwenden möchten.

Während ich tippte, hat Felix Kling bereits eine ziemlich prägnante Antwort gegeben, in der sie verglichen werden, wann sie jeweils verwendet werden sollen, sodass ich nicht weiter darauf eingehen werde.

Jelford
quelle
Nur eine pedantische Anmerkung ... Eine JavaScript-Feldsuche ist nicht unbedingt eine Kartensuche. Dies hängt vom Objekt und dem betreffenden Feld ab. Kleine Objekte (insbesondere solche, an die nach dem Bau keine Eigenschaften angehängt wurden) verwendeten häufig optimierte "schnelle Typen" mit Inline-Caches in modernen JS-Engines und greifen bei Objekten mit einer großen Anzahl von Eigenschaften oder auf langsamere Eigenschaftstaschen (Kartensuchen) zurück Fälle, in denen sich eine Objektstruktur häufig ändert.
Brandon Paddock
2
Ich finde, dass JSON für Menschen einfacher zu analysieren ist, aber XML für Computer einfacher zu analysieren ist.
Jus12
5
Nicht wahr, zum Beispiel verwendet PHON in PHP json.so ohne Abhängigkeiten bei 78k, XML hingegen benötigt xml.so oder xmlreader.so bei 54k / 32k, benötigt aber auch libxml2.so mit 1,4megs . Bei mehr Code dauert die Verarbeitung und Verwendung von mehr Speicher länger. Ganz zu schweigen davon, dass XML aufgrund seiner Knoten- / Baumstruktur Zirkelverweise enthält, was in jeder Sprache ohne schwache Verweise schmerzhaft sein kann. Ich habe in mehreren Sprachen festgestellt, dass der XML-Parser weitaus größer ist (mehr Speicherplatz beansprucht und mehr Speicher benötigt) als jeder seiner JSON-Parser.
Rahly
Warum mischen Sie das Problem des strengen JS-Status mit diesem nicht verwandten Vergleich? Bezug auf doppelte oder dreifache Gleichheitszeichen.
Atilkan
1
@atilkan, weil viele Parser numerische Zeichenfolgen als Zahlen interpretieren oder Zahlen als numerische Zeichenfolgen speichern.
Mazunki
244

Schneller ist kein Attribut von JSON oder XML oder ein Ergebnis, das ein Vergleich zwischen diesen ergeben würde. Wenn überhaupt, ist dies ein Attribut der Parser oder der Bandbreite, mit der Sie die Daten übertragen.

Hier ist (am Anfang) eine Liste der Vor- und Nachteile von JSON und XML:


JSON

Profi:

  • Einfache Syntax, die im Vergleich zu XML zu weniger "Markup" -Aufwand führt.
  • Die einfache Verwendung mit JavaScript als Markup ist eine Teilmenge der JS-Objektliteralnotation und hat dieselben grundlegenden Datentypen wie JavaScript.
  • JSON-Schema zur Beschreibung sowie zur Validierung von Datentyp und Struktur
  • JsonPath zum Extrahieren von Informationen in tief verschachtelten Strukturen

Con:

  • Einfache Syntax, nur eine Handvoll verschiedener Datentypen werden unterstützt.

  • Keine Unterstützung für Kommentare.


XML

Profi:

  • Verallgemeinertes Markup; Es ist möglich, "Dialekte" für jeden Zweck zu erstellen
  • XML-Schema für Datentyp, Strukturvalidierung. Ermöglicht auch das Erstellen neuer Datentypen
  • XSLT zur Umwandlung in verschiedene Ausgabeformate
  • XPath / XQuery zum Extrahieren von Informationen in tief verschachtelten Strukturen
  • integrierte Unterstützung für Namespaces

Con:

  • Relativ wortreich im Vergleich zu JSON (führt zu mehr Daten bei gleicher Informationsmenge).

Am Ende müssen Sie sich also entscheiden, was Sie brauchen . Offensichtlich haben beide Formate ihre legitimen Anwendungsfälle. Wenn Sie hauptsächlich JavaScript verwenden, sollten Sie sich für JSON entscheiden.

Bitte zögern Sie nicht, Vor- und Nachteile hinzuzufügen. Ich bin kein XML-Experte;)

Felix Kling
quelle
20
Eine weitere Con für JSON und Pro für XML: JSON unterstützt keine Objektreferenz (zyklisch oder nicht), XML jedoch. XML erzwingt dazu, dass das idAttribut innerhalb des Dokuments eindeutig ist.
Earth Engine
7
@EarthEngine Tatsächlich unterstützt Json.Net ( json.codeplex.com ) Objektreferenzen: james.newtonking.com/projects/json/help/index.html?topic=html/… .
Dmitrii Lobanov
22
@DmitryLobanov: Sie fügen dem JSON-Standard nur einige zusätzliche Einschränkungen hinzu, die jedoch von anderen JSON-Tools nicht erkannt werden. Es ist also nicht "native" für JSON. Für XML ist die Einschränkung jedoch im Standard geschrieben, sodass sie nativ ist.
Earth Engine
1
Was ist mit JSON Schema? en.wikipedia.org/wiki/JSON#JSON_Schema
John Doe
5
In JSON sind Arrays sowie der Wert "null" integriert. Während Sie in XML eine Art Konvention für Ihre Schema-Parser benötigen. Es gibt auch XSLT-ähnliche Konvertierungsprojekte für JSON (z. B. github.com/emlynoregan/bOTLjs )
Vasyl Boroviak
22

Die Verarbeitungsgeschwindigkeit ist möglicherweise nicht die einzige relevante Angelegenheit. Da dies jedoch die Frage ist, sind hier einige Zahlen in einem Benchmark aufgeführt: JSON vs. XML: Einige harte Zahlen zur Ausführlichkeit . Für die Geschwindigkeit bietet XML in diesem einfachen Benchmark einen Overhead von 21% gegenüber JSON.

Ein wichtiger Hinweis zur Ausführlichkeit, der, wie der Artikel sagt, die häufigste Beschwerde ist: Dies ist in der Praxis nicht so relevant (weder XML- noch JSON-Daten werden normalerweise von Menschen, sondern von Maschinen verarbeitet), auch wenn dies der Fall ist Geschwindigkeit benötigt es etwas mehr Zeit zum Komprimieren.

In diesem Benchmark wurde auch eine große Datenmenge verarbeitet, und eine typische Webanwendung überträgt keine Datenblöcke mit einer Größe von bis zu 90 MB, und die Komprimierung ist möglicherweise nicht vorteilhaft (für ausreichend kleine Datenblöcke ein komprimierter Block wird größer sein als der unkomprimierte Block), also nicht anwendbar.

Wenn jedoch keine Komprimierung erforderlich ist, wird JSON als offensichtlich kürzer über den Übertragungskanal weniger gewichtet, insbesondere wenn es über eine WebSocket-Verbindung übertragen wird, bei der das Fehlen des klassischen HTTP-Overheads den Unterschied zum Vorteil von JSON noch mehr ausmachen kann von Bedeutung.

Nach der Übertragung sollen Daten verbraucht werden, und diese zählen zur Gesamtverarbeitungszeit. Wenn ausreichend große oder komplexe Daten übertragen werden sollen, erfordert das Fehlen eines Schemas, das automatisch von einem validierenden XML-Parser überprüft wird, möglicherweise eine stärkere Überprüfung der JSON-Daten. Diese Überprüfungen müssten in JavaScript ausgeführt werden, von dem nicht bekannt ist, dass es besonders schnell ist. In solchen Fällen kann dies zu einem zusätzlichen Overhead gegenüber XML führen.

Auf jeden Fall liefert nur das Testen die Antwort für Ihren speziellen Anwendungsfall (wenn Geschwindigkeit wirklich die einzige Sache ist und weder Standard noch Sicherheit noch Integrität…).

Update 1: Erwähnenswert ist EXI, das binäre XML-Format, das eine Komprimierung zu geringeren Kosten als die Verwendung von Gzip bietet und die Verarbeitung spart, die ansonsten zum Dekomprimieren von komprimiertem XML erforderlich ist. EXI ist für XML, was BSON für JSON ist. Haben Sie hier einen kurzen Überblick mit Bezug auf die räumliche und zeitliche Effizienz: EXI: Der letzte Binärstandard? .

Update 2: Es gibt auch binäre XML-Leistungsberichte, die vom W3C durchgeführt werden, da Effizienz und geringer Speicher- und CPU-Platzbedarf auch für den XML-Bereich von Bedeutung sind: Effiziente XML-Austauschbewertung .

Update 2015-03-01

Worth in diesem Zusammenhang bemerkt zu werden, da HTTP - Overhead als ein Problem angesprochen wurde: die IANA hat die EXI Codierung (die effizienten binären XML wie oben erwähnt), als aa Inhalt Codierung für das HTTP - Protokoll (neben mit Kompresse , deflate und gzip ) . Dies bedeutet, dass EXI eine Option ist, die von Browsern unter möglicherweise anderen HTTP-Clients verstanden werden kann. Siehe Hypertext Transfer Protocol-Parameter (iana.org) .

Hibou57
quelle
"Für die Geschwindigkeit bietet XML in diesem einfachen Benchmark einen Overhead von 21% gegenüber JSON" - es gibt einen großen Unterschied beim JSON-Parsing, abhängig vom verwendeten Parser. Es ist fast bedeutungslos, einen bestimmten Parser zu zitieren. Gleiches gilt für XML.
Jeffrey Blattman
17

Ich fand diesen Artikel auf dem digitalen Basar wirklich interessant. Zitieren ihrer Zitate aus Norm:

Über JSON-Profis:

Wenn Sie nur Atomwerte oder Listen oder Hashes von Atomwerten weitergeben möchten, bietet JSON viele Vorteile von XML: Es ist einfach über das Internet zu verwenden, unterstützt eine Vielzahl von Anwendungen und ist einfach, Programme zur Verarbeitung von JSON zu schreiben. Es verfügt über wenige optionale Funktionen, ist gut lesbar und einigermaßen klar, das Design ist formal und präzise, ​​JSON-Dokumente sind einfach zu erstellen und es wird Unicode verwendet. ...

Über XML-Profis:

XML kann bemerkenswert gut mit dem vollen Reichtum unstrukturierter Daten umgehen. Ich mache mir überhaupt keine Sorgen um die Zukunft von XML, auch wenn der Tod von einem Kader von Web-API-Designern mit Freude gefeiert wird.

Und ich kann nicht widerstehen, ein "Ich habe es dir gesagt!" Token weg in meinem Schreibtisch. Ich freue mich darauf zu sehen, was die JSON-Leute tun, wenn sie aufgefordert werden, umfangreichere APIs zu entwickeln. Wenn sie weniger gut strukturierte Daten austauschen möchten, werden sie diese dann in JSON einbinden? Ich sehe gelegentlich Erwähnungen einer Schemasprache für JSON. Werden andere Sprachen folgen? ...

Ich persönlich stimme Norm zu. Ich denke, dass die meisten Angriffe auf XML von Webentwicklern für typische Anwendungen stammen und nicht wirklich von Integrationsentwicklern. Aber das ist meine Meinung! ;)

Christian Vielma
quelle
Gut ausgedrückt! Wenn 80% der aktiven Entwickler Javascript-Kinder sind, äußern 80% ihre Meinung, dass JSON "besser" ist. Aber jeder, der getippte Sprachen verwendet, ist nur ein wenig amüsiert über JSON. { "foo": 42 }Welcher Typ ist das Objekt? Um den Mangel an Typ zu beheben, werden folgende Dinge angezeigt : { "__type": "Bar", "foo": 42 }. In XML hingegen kann der Typ mit dem Elementnamen konnotiert werden : <Bar><foo>42</foo></Bar>. Nur Lisp und Javascript mögen json;)
BitTickler
15

Die XML-Datei (Extensible Markup Language) wird häufig als XHR verwendet, da dies eine Standard-Broadcast-Sprache ist, die von jeder Programmiersprache verwendet werden kann und sowohl auf Server- als auch auf Clientseite unterstützt wird. Dies ist daher die flexibelste Lösung. Das XML kann für mehrere Teile getrennt werden, sodass eine bestimmte Gruppe den Teil des Programms entwickeln kann, ohne die anderen Teile zu beeinflussen. Das XML-Format kann auch durch die XML-DTD oder das XML-Schema (XSL) bestimmt und getestet werden.

Der JSON ist ein Datenaustauschformat, das als mögliches Format für JavaScript-Anwendungen immer beliebter wird. Grundsätzlich ist dies ein Objektnotationsarray. JSON hat eine sehr einfache Syntax, die leicht erlernt werden kann. Außerdem unterstützt JavaScript das Parsen von JSON mit der evalFunktion. Andererseits hat die evalFunktion Negative. Beispielsweise kann das Programm JSON sehr langsam analysieren und aus Sicherheitsgründen evalsehr riskant sein. Dies bedeutet nicht, dass der JSON nicht gut ist, nur müssen wir vorsichtiger sein.

Mein Vorschlag ist, dass Sie JSON für Anwendungen mit leichtem Datenaustausch wie Spiele verwenden sollten. Da Sie sich nicht wirklich um die Datenverarbeitung kümmern müssen, ist dies sehr einfach und schnell.

Das XML eignet sich am besten für größere Websites, z. B. Einkaufsseiten oder ähnliches. Das XML kann sicherer und klarer sein. Sie können grundlegende Datenstrukturen und Schemata erstellen, um die Korrektur einfach zu testen und in Teile zu unterteilen.

Ich schlage vor, Sie verwenden XML wegen der Geschwindigkeit und der Sicherheit, aber JSON für leichte Sachen.

Gergely Fehérvári
quelle
Ich stimme nicht ab, aber ich bin gespannt, wie Sie JSON als schwerere Nutzlast oder allgemein als langsamer ansehen. GZip / Deflate kann angewendet werden. Die Syntax macht es von Natur aus kleiner in Bezug auf Bytes. JSON kann das Schema auch als Vertrag definieren und einfach als solches serialisiert werden.
Anthony Mason
JSON muss nicht ausgewertet werden, um analysiert zu werden.
Yay295
7

Das Wichtigste an JSON ist, die Datenübertragung aus Sicherheitsgründen verschlüsselt zu halten. Kein Zweifel, dass JSON viel schneller ist als XML. Ich habe gesehen, dass XML 100 ms dauert, während JSON nur 60 ms benötigt. JSON-Daten sind einfach zu bearbeiten.

Pate
quelle
5
Ich bin damit einverstanden, dass JSON den Kampf um die Datenübertragung gewinnt, aber es fehlt an Markup, Validierung und Erweiterung der Elemente. Aus diesem Grund crawlt Google sitemap.xml nicht sitemap.json
Chetabahana
1
Sitemap wurde definiert, bevor json populär wurde, daher ist dies nicht das beste Beispiel. Sitemap wird auch als Server-zu-Server angesehen, bei dem XML beliebter ist als JSON. (JSON wirklich nur, weil beliebt, weil es einfach ist, in JavaScript zu arbeiten.)
Matthew Whited
aber Google AMP verwendet json und nicht xml
Ashraf