Antworten:
Bevorzugen Sie XML gegenüber JSON, wenn eine dieser Bedingungen erfüllt ist:
Bevorzugen Sie JSON gegenüber XML, wenn all dies zutrifft:
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.
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
eval()
JSON ing ein großes no-no?
Einige andere Dinge, auf die ich im XML vs JSON relm gestoßen bin:
JSON ist sehr gut für
Was bedeutet, dass es dazu neigt, ein Array oder ein verschachteltes Array zu mögen. JSON fehlen jedoch beide
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.
Normalerweise ist JSON kompakter und schneller zu analysieren.
Bevorzugen Sie XML, wenn:
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.
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).
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.
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 :).
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 .
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.
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.
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.
Verwenden von JSON
Verwenden von XML
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? ...
Schnelle Regeln:
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 .
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.