Wann bevorzugen Sie JSON gegenüber XML?

148

Meine Anforderung besteht nur darin, eine Reihe von Werten anzuzeigen, die in einem Spread aus der Datenbank abgerufen wurden. Ich benutze jquery.

Sarego
quelle

Antworten:

149

Bevorzugen Sie XML gegenüber JSON, wenn eine dieser Bedingungen erfüllt ist:

  • Sie benötigen eine Nachrichtenüberprüfung
  • Sie verwenden XSLT
  • Ihre Nachrichten enthalten viel markierten Text
  • Sie müssen mit Umgebungen zusammenarbeiten, die JSON nicht unterstützen

Bevorzugen Sie JSON gegenüber XML, wenn all dies zutrifft:

  • Nachrichten müssen nicht validiert werden, oder die Validierung ihrer Deserialisierung ist einfach
  • Sie transformieren keine Nachrichten oder ihre Deserialisierung ist einfach
  • Ihre Nachrichten sind meistens Daten, kein markierter Text
  • Die Messaging-Endpunkte verfügen über gute JSON-Tools
Robert Rossney
quelle
9
JSON bietet keinen Vorteil gegenüber XML bei der Verarbeitung von markiertem Text. Aber ich verstehe deinen Standpunkt; das ist vielleicht übertrieben.
Robert Rossney
10
Wenn alle Bedingungen gleich sind, bevorzugen Sie JSON aus zwei Gründen: JSON ist viel leichter zu analysieren als XML (CPU-freundlich) und erfordert viel weniger Datenübertragung (Netzwerk-freundlich).
Roger Barreto
Wann würden Sie XSLT verwenden und nicht XML? XML ist eine Selbstverständlichkeit, wenn Sie bereits XSLT verwenden. Das sollte das Argument zur Verwendung von XML nicht unterstützen. Es ist so, als würde man JSON verwenden, wenn Sie JSON.parse () verwenden. Ich würde auch argumentieren, dass es einfacher ist, ein JSON-Objekt zu transformieren, als eine XSLT-Transformation zu schreiben, aber das könnte meine persönliche Neigung sein.
Spencer
Ich stimme dem Validierungsteil in JSON nicht vollständig zu. JSON ist ebenfalls validierbar. Überprüfen Sie diesen IETF-Entwurf: Link Es ist ein Entwurf, aber immer noch ..
sotn
@sotn Sie haben nicht PL / SQL für JSON wie XML (z. B. XQuery). Es ist die Basis für einige NoSQL-DBs (eXist, MarkLogic Server, EMC Documentum xDB, BaseX, Zorba)
Dmytro Melnychuk
81

Ich verwende JSON, es sei denn, ich muss XML verwenden. Es ist einfacher zu verstehen und (da es weniger Konfigurationsaufwand erfordert) einfacher zu programmieren, um zu lesen und zu schreiben, wenn die Bibliotheken in Ihrem Kontext verfügbar sind, und sie sind jetzt ziemlich allgegenwärtig.

Als Amazon seine Kataloge zum ersten Mal als Webdienst zur Verfügung stellte, boten sie sowohl JSON als auch XML an. Etwa 90% der Implementierer haben sich für JSON entschieden.

dkretz
quelle
56
"Ich verwende JSON, es sei denn, ich muss XML verwenden." ~ Genau.
EndangeredMassa
2
Die tiefere Frage lautet also: "Aus welchen Gründen müssten Sie XML verwenden?" Sind diese Gründe idiotisch? oder spiegeln sie nur unterschiedliche Anliegen wider, aus einer anderen Sicht als Ihrer?
13ren
5
Mehrere mögliche Gründe, einschließlich vorhandener Software, die ich nicht umschreiben möchte. Am wichtigsten ist jedoch die Verwendung von XML als Datenaustauschformat, bei dem ich nicht beide Enden kontrolliere, oder es gibt einen formalen Standard, der XML anwendet und erfordert. Ich kann nur willkürlich wählen, wenn ich der einzige beteiligte Entwickler bin.
Dkretz
15

In Anbetracht Ihres speziellen Falls, in dem Sie bereits auf der Clientseite Javascript ausführen, würde ich mich aus folgenden Gründen für JSON entscheiden:

  • Da JSON in Javascript nativ ist, müssten Sie weniger Code auf der Clientseite schreiben - nur eval()(oder noch besser JSON.parse()) die JSON-Zeichenfolge und ein Objekt erhalten, das Sie verwenden können.

  • Gleichzeitig wird die clientseitige Evaluierung von JSON effizienter und damit schneller.

  • Die JSON-Serialisierung erzeugt kürzere Zeichenfolgen als XML. Durch die Verwendung von JSON wird die Datenmenge reduziert, die über das Kabel übertragen wird, und die Leistung in dieser Hinsicht verbessert.

Hier einige weitere Informationen: http://www.subbu.org/blog/2006/08/json-vs-xml

urig
quelle
7
ist nicht eval()JSON ing ein großes no-no?
Shoosh
@Shy, JSONs eigene Site sagt, dass Sie eval auf JSON verwenden können (mit umklammernden
strager
9
Entnommen aus json.org: Die Auswertungsfunktion ist sehr schnell. Es kann jedoch jedes JavaScript-Programm kompilieren und ausführen, sodass Sicherheitsprobleme auftreten können. Die Verwendung von eval wird angezeigt, wenn die Quelle vertrauenswürdig und kompetent ist. Es ist viel sicherer, einen JSON-Parser zu verwenden
sarego
2
Ziehen Sie JSON.parse () eval () vor.
Havvy
14

Einige andere Dinge, auf die ich im XML vs JSON relm gestoßen bin:

JSON ist sehr gut für

  • Name / Wert-Paare
  • diese Paare verschachteln

Was bedeutet, dass es dazu neigt, ein Array oder ein verschachteltes Array zu mögen. JSON fehlen jedoch beide

  • Attribute
  • Namespace

Wenn Sie also zwei oder mehr JSON-Dienste kombinieren, kann dies zu potenziellen Namespace-Konflikten führen. Davon abgesehen kann JSON nach meiner Erfahrung für etwa 90% der gleichen Dinge verwendet werden, für die XML beim Datenaustausch verwendet werden kann.

Null
quelle
Ein weiteres Problem von Json ist, dass Sie zwei Json-Nachrichten nicht einfach zusammenführen können, um eine neue Json-Nachricht zu erstellen. Es wird normalerweise nicht gut geformt sein ..
vtd-xml-author
7
Wofür würden Sie Attribute benötigen? Wenn Ihr Element andere Werte enthält, machen Sie es zu einem Objekt - die Elemente sind Ihre "Attribute". Ehrlich gesagt denke ich, dass die bifurkalen Attribute / Container-Struktur von XML völlig nachteilig sind.
foo
Ich würde argumentieren, dass JSON ohne Attribute eine Funktion ist.
Brian
11

Normalerweise ist JSON kompakter und schneller zu analysieren.

Bevorzugen Sie XML, wenn:

  • Sie müssen die Daten auf dem Client verarbeiten und können dafür XSL nutzen. Möglicherweise funktioniert die XML + XSL-Kette schneller als JSON + JavaScript, insbesondere für große Datenmengen.
    • Ein guter Fall ist die Konvertierung der Daten in ein HTML-Snippet.
  • Verschiedene Legacy-Fälle:
    • Es gibt einen vorhandenen XML-Dienst, und es ist aus bestimmten Gründen mühsam, ihn mit JSON neu zu schreiben.
    • Sie müssen diese Daten nach einer leichten Verarbeitung mithilfe von Benutzereingaben als XML zurücksenden.

Ein wichtiger Fall von (fast) XML: Der Versuch, beim Senden von HTML-Snippets zu erkennen, ist vorteilhafter als das Senden von Rohdaten. AHAH kann in einfachen Anwendungen Wunder wirken, wird jedoch häufig übersehen. Normalerweise setzt dieser Stil voraus, dass ein Server HTML-Snippets sendet, die ohne Verarbeitung auf der Webseite eingefügt werden.

Normalerweise wird in AHAH-Fällen CSS maximal genutzt, um Snippets visuell zu massieren und einfache Bedingungen wie das Ausblenden / Anzeigen relevanter Teile des Snippets mithilfe benutzerspezifischer oder anwendungsspezifischer Einstellungen zu implementieren.

Eugene Lazutkin
quelle
8

JSON ist einfach und schneller zu analysieren. XML ist etwas schwieriger zu analysieren und langsamer zu analysieren und zu übertragen (in den meisten Fällen).

Da Sie jQuery verwenden, empfehle ich die Verwendung von JSON: jQuery kann JSON-Daten abrufen und automatisch in ein Javascript-Objekt konvertieren. Tatsächlich können Sie JSON-Daten mit eval in ein Javascript-Objekt konvertieren . XML müsste von Ihnen manuell übertragen werden (ich weiß nicht, wie dies in Javascript funktioniert, aber es ist in den meisten Sprachen, mit denen ich XML-Bibliotheken verwendet habe, schwierig / ärgerlicher).

Strager
quelle
1
JSON ist per Definition ein JavaScript-Objekt, jQuery macht eigentlich nichts spezielles "Konvertieren". Ich dachte nur, es sollte geklärt werden.
Brian Gianforcaro
5
JSON ist kein Javascript-Objekt, es sei denn, es wird in Javascript instanziiert. Es folgt dem Format, das für die Serialisierung von Javascript-Objekten verwendet wird, ist jedoch in den meisten Sprachen verfügbar (mit den richtigen Add-Ons und integrierten Funktionen), mindestens so einfach wie XML.
dkretz
@ Gianforcaro, das merke ich. Ich werde meinen Beitrag bearbeiten, um dies klarer zu formulieren. @doofledorfer, sagte ich "und konvertiere es in ein Javascript-Objekt." Ich habe nicht gesagt, dass die JSON-Daten ein Javascript-Objekt sind.
Strager
Ah, sorry, habe das nicht verstanden.
Strager
8

JSON ist in Bezug auf die Verarbeitung, die der Client-Browser zum Parsen der Daten ausführen muss, immer vorzuziehen. Außerdem ist JSON ein leichtes Datenaustauschformat.

XML-Parsing verbraucht immer viele Browser-Ressourcen und sollte so weit wie möglich vermieden werden, sofern nichts anderes erforderlich ist.

Tejasvi
quelle
7

Ich habe einen Blog-Beitrag zu diesem Thema, der die Geschichte der Webprotokolle (z. B. SOAP, XML, JSON, REST, POX usw.) ausführlich beschreibt und eine Zusammenfassung sowie einige Vor- und Nachteile der einzelnen Protokolle enthält: http://www.servicestack.net / mythz_blog /? p = 154

Ich denke tatsächlich, dass Sie viele Ähnlichkeiten zwischen XML und JSON ziehen können, indem Sie die Unterschiede zwischen dynamischen (JSON) und statischen (XML) Sprachen vergleichen.

Grundsätzlich ist XML ein strengeres, starreres Serialisierungsformat, das optional mit einem zugehörigen Schema (entweder eine XSD oder eine DTD) überprüft werden kann. XSDs sind recht aufwendig und ermöglichen es Ihnen, viele verschiedene Typen zu beschreiben, z. B. Daten, Zeiten, Aufzählungen, benutzerdefinierte Typen und sogar Typvererbung usw. SOAP baut effektiv auf dem XML-Funktionsumfang auf und bietet eine standardisierte Möglichkeit zur Beschreibung Ihrer Webdienste ( zB Typen und Operationen) über eine WSDL. Die Ausführlichkeit und Komplexität der WSDL-Spezifikation bedeutet, dass die Entwicklung mühsamer sein kann. Gleichzeitig stehen Ihnen jedoch viel mehr Tools zur Verfügung, und die meisten modernen Sprachen bieten automatisierte Tools zum Generieren Ihrer Client-Proxys, die einen Teil der Belastung übernehmen Aus, wenn versucht wird, mit externen Diensten zusammenzuarbeiten.

Ich würde weiterhin empfehlen, XML für Ihre Webdienste zu verwenden, wenn Sie einen genau definierten "Unternehmensdienst" haben, der nicht häufig geändert wird, oder auf Ihren Webdienst aus vielen verschiedenen Sprachen zugegriffen werden muss.

Bei all seinen Vorteilen hat XML auch Nachteile. Es basiert auf Namespaces, um ein typisiertes erweiterbares Format bereitzustellen, und ermöglicht es Ihnen, Attribute und Elemente innerhalb desselben Dokuments anzugeben. Wenn Sie in einem Dokument unterschiedliche Namespaces haben, bedeutet dies viel Zeit, wenn Sie einen XML-Parser zum Extrahieren von Daten verwenden. Außerdem müssen Sie den Namespace jedes Elements angeben, das Sie abrufen / durchlaufen möchten. Außerdem wird die Nutzlast extrapoliert, wodurch sie ausführlicher wird, als sie sein muss. Die Option, sowohl Attribute als auch Elemente auszugeben, bedeutet, dass Ihre Klassen nicht gut einem XML-Dokument zugeordnet werden können. Allein diese Funktionen machen es für die meisten Sprachen zu einer schlechten programmatischen Anpassung, was die Arbeit mühsamer und umständlicher macht.

JSON hingegen ist in vielerlei Hinsicht das genaue Gegenteil von XML, da es sehr lose typisiert ist und nur einfache Typen unterstützt: Number, Bool, String, Objects und Arrays. Alles andere muss im Wesentlichen in eine Zeichenfolge passen. Dies ist nicht besonders hilfreich, wenn Sie versuchen, über Sprachgrenzen hinweg zu kommunizieren, da Sie einige nicht standardmäßige Out-of-Band-Spezifikationen einhalten müssen, wenn Sie spezifischere Typen unterstützen möchten. Auf der anderen Seite passt sein begrenzter Funktionsumfang gut programmatisch zu den meisten Sprachen - und ist perfekt für JavaScript geeignet, da eine JSON-Zeichenfolge direkt in ein JavaScript-Objekt ausgewertet werden kann.

Größe und Leistung

Ich habe einige Benchmarks für Northwind-Datenbanken zur Verfügung , die die Größe und Geschwindigkeit zwischen Microsoft XML- und JSON-Implementierungen vergleichen. Grundsätzlich ist XML mehr als doppelt so groß wie JSON, aber gleichzeitig sieht es so aus, als ob Microsoft große Anstrengungen unternommen hat, um den XML DataContractSerializer zu optimieren, da er mehr als 30% schneller als der JSON ist. Es scheint, dass Sie einen Kompromiss zwischen Größe und Leistung eingehen müssen. Da ich mit dieser Tatsache nicht zufrieden bin, habe ich beschlossen, meinen eigenen schnellen JsonSerializer zu schreiben, der jetzt 2,6- mal schneller ist als der XML- Code von MS - also das Beste aus beiden Welten :).

Mythos
quelle
6

Ich würde XML anstelle von JSON wählen, wenn ich den Teil der eingehenden Daten validieren muss, da XML dies nativ über XSD unterstützt.

Lowglider
quelle
3

von JSON - die letzten Füße

Wenn Sie den JSON-Weg gehen, stoßen Sie auf dieselben Probleme, mit denen XML vor 10 Jahren konfrontiert war:

Das Mischen von Daten aus zwei verschiedenen Quellen zu einem JSON-Paket kann dazu führen, dass Elementbeschriftungen ineinander stoßen. Mischen Sie einen Packzettel und eine Rechnung, und plötzlich kann die Absenderadresse etwas ganz anderes bedeuten. Deshalb hat XML Namespaces .

Das Konvertieren zwischen verschiedenen JSON-Strukturen würde das Schreiben von profanem Code erfordern. Eine deklarativere Methode zum Zuordnen von Daten würde die Arbeit erleichtern. Deshalb hat XML XSLT .

Die Beschreibung der Struktur eines JSON-Pakets - seiner Felder, Datentypen usw. - ist erforderlich, damit sich Benutzer an Ihre Dienste anschließen können. Hierzu ist unbedingt eine Metadatensprache erforderlich. Deshalb hat XML Schemas .

Es ist wichtig, zwei gleichzeitige Client-Server-Gespräche zu führen. Wenn Sie dem Server zwei Fragen stellen und eine Antwort zurückerhalten, woher wissen Sie, welche Frage er beantwortet? Deshalb hat XML eine WS-Korrelation .

Özgür
quelle
2
Namespaces sind nur eine weitere Problemumgehung. Sie können dasselbe in JSON tun, wenn Sie möchten. Auch die WS-Korrelation wurde nachträglich zu XML hinzugefügt und ist nicht "eingebaut". Sie können es auch zu JSON hinzufügen. Die Strukturbeschreibung (Schemas) ist nicht speziell für XML. Sie können dies auf verschiedene Arten mit jeder formalen Sprache seit der Erfindung von eBNF tun. XSLT ist jedoch ein gültiges Verkaufsargument.
foo
2

JSON ist die native Codierung für Javascript. Es sollte viel schneller und einfacher zu bearbeiten sein.

Dustin
quelle
2

Aus der ersten Zeile unter http://json.org/xml.html

XML (Extensible Markup Language) ist ein Textformat, das von SGML (Standard Generalized Markup Language) abgeleitet ist. XML ist im Vergleich zu SGML einfach. Im Vergleich dazu ist die HyperText Markup Language (HTML) noch einfacher. Trotzdem ist ein gutes Nachschlagewerk über HTML einen Zentimeter dick. Dies liegt daran, dass das Formatieren und Strukturieren von Dokumenten ein kompliziertes Geschäft ist. . . .

Natürlich ist JSON schneller, aber es ist noch deutlicher, dass es schwer zu lesen ist. Verwenden Sie JSON für die Geschwindigkeit, verwenden Sie XML, wenn es eine menschliche Interaktion gibt, und Sie können die Geschwindigkeit opfern.


quelle
2
Ihre Antwort bringt keine neuen Informationen ... Aber ich denke, es ist immer noch wahr
1

Ich verwende JSON für jede Art von Konfiguration, Datenaustausch oder Messaging. Ich verwende XML nur, wenn ich aus anderen Gründen oder um dokumentähnliche Daten semantisch markieren muss.

Lawrence Dol
quelle
1

Sowohl XML als auch JSON werden von Microsoft unterstützt. XML-Literale waren die neue coole Funktion in VB 9. In der kommenden Version von ASP.NET 4.0 ist JSON ein Muss, um die Leistungsfähigkeit des clientseitigen Templating zu nutzen.

Aus der von Ihnen gestellten Frage geht hervor, dass JSON möglicherweise die richtige Wahl für Sie ist, da es auf Clientseite mit oder ohne jQuery einfach zu verarbeiten ist.

MoizNgp
quelle
1

Verwenden von JSON

  • Wenn die Daten von JavaScript im Browser verwendet werden sollen.
  • Das Datenmodell ist einfach und nicht komplex (zu viele zusammengesetzte Objekte).

Verwenden von XML

  • Meistens in einer SOA-Umgebung, in der Sie mehrere Dienste auf heterogenen Plattformen und Technologien integrieren.
  • SOAP hat den Vorteil, dass es über andere Protokolle als HTTP übertragen werden kann.
  • Einfache Verwendung in Datenmodell-Transformationstools wie XSLT, XSL-FO usw.
  • Viel Datenbankunterstützung zum Speichern / Abfragen (XQuery) von XML-Daten.
  • XML ist ein sehr ausgereiftes Datenformat, sodass Sie zahlreiche Tools finden, die jeden denkbaren Anwendungsfall unterstützen.
Rohitdev
quelle
1

Ich fand diesen Artikel auf dem digitalen Basar wirklich interessant.

Einige Teile des Artikels sind unten zitiert.

Ü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 sein 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? ...

Christian Vielma
quelle
Diese Antwort und die bereitgestellten Auszüge stellen den Tenor des zitierten Artikels, der JSON stark bevorzugt, völlig falsch dar. Die Zitate stammen von Dritten, mit denen der Autor des Artikels nicht einverstanden ist. Der zitierte Artikel ist eine sehr gute Lektüre - daher trotz der falschen Darstellung keine Ablehnung dieser Antwort.
Lawrence Dol
1

Schnelle Regeln:

  • JSON: Programm-zu-Programm-Datenformat
  • YAML (JSON-Obermenge): Human-to-Program-Datenformat
  • XML: Dokument-Markup-Format

Erläuterung:

Die einzige Aufgabe von JSON besteht darin, objektorientierte Daten unter Verwendung der Datentypen zu serialisieren, die den meisten Programmiersprachen gemeinsam sind: Listen , Hashes und Skalare . Zu diesem Zweck sind sie wirklich nicht zu übertreffen oder zu verbessern. "JSON hat keine Versionsnummer [da] keine Überarbeitungen der JSON-Grammatik erwartet werden". - Douglas Crockford (Unschlagbar als Zeichen dafür, dass Sie Ihren Job perfekt machen)

XML wurde früher als Datenaustauschformat verkauft, berücksichtigt jedoch die beiden häufigsten Anwendungsfälle: Asynchrone Client-Server-Kommunikation (AJAX) - JSON hat XML so gut wie vollständig ersetzt (das X sollte eigentlich ein J sein) und Webdienste : JSON hat XML zu einer redundanten Alternative gemacht.

Das andere, wofür XML weit verbreitet war, waren vom Menschen beschreibbare / lesbare (?) Datendateien für Programme, aber auch hier haben Sie ein prägnanteres, programmfreundlicheres und menschlicheres Format in YAML, einer JSON-Obermenge.

Für die Datendarstellung schlägt JSON XML auf ganzer Linie. Was bleibt dann für XML übrig? Dokumentendarstellung mit gemischtem Inhalt, wofür sie gedacht war .

Yarin
quelle
0

Die meisten neueren Webtechnologien arbeiten mit JSON, was definitiv ein guter Grund für die Verwendung von JSON ist. Ein großer Vorteil ist, dass Sie in XML dieselben Informationen auf mehrere verschiedene Arten darstellen können, was in JSON einfacher ist.

Auch JSON IMHO ist viel klarer als XML, was es für mich zu einem klaren Vorteil macht. Und wenn Sie mit .NET arbeiten, ist Json.NET ein klarer Gewinner, der Ihnen bei der Arbeit mit JSON hilft.

xmorera
quelle