Können wir XML vollständig durch JSON ersetzen? [geschlossen]

78

Ich bin sicher, dass viele Entwickler mit XML und JSON vertraut sind und beide verwendet haben. Daher macht es keinen Sinn zu erklären, was sie sind und was ihr Zweck ist, auch nicht in Kürze.

Wenn wir versuchen, ihre Konzepte abzubilden, können wir sagen (korrigieren Sie mich, wenn ich falsch liege):

  1. XML-Tags entsprechen JSON {}
  2. XML-Attribute entsprechen JSON-Eigenschaften
  3. Die XML-Tag-Sammlung entspricht JSON []

Das einzige, woran ich denken kann, was es in JSON nicht gibt, sind XML-Namespaces .

Die Frage ist, ob wir angesichts dieses Mappings und der Tatsache, dass JSON in diesem Mapping sehr viel leichter ist, in Zukunft eine Welt ohne XML sehen können (oder zumindest theoretisch an eine Welt denken), aber mit JSON alles tun, was XML kann? Können wir JSON überall dort verwenden, wo XML verwendet wird?

PS: Bitte beachte, dass ich diese Frage gesehen habe . Es ist etwas ganz anderes als das, was ich hier frage. Erwähnen Sie daher bitte kein Duplikat .

Saeed Neamati
quelle
14
Wir können (und sollten) all das überfüllte, schlecht designte Zeug durch S-Ausdrücke ersetzen. Eine Welt ohne XML wäre in der Tat ein viel besserer Ort, aber das ist leider nichts als ein Wunschdenken.
SK-logic
19
Pfui. Ich hasse diese Fragen. Ich denke, dies ist wirklich ein Fall für die Verwendung des richtigen Werkzeugs für den Job und nicht dafür, ob eines das andere vollständig ersetzen kann. Es gibt so wenige Absolute auf der Welt, sogar mit Computern. Ich konnte mir nicht vorstellen, irgendetwas mit JSON zu machen, zumindest dort, wo die jeweiligen Technologien jetzt stehen.
Philip Regan
2
@Philip, das ist keine Frage, um etwas zu zerstören. Es wird nur versucht herauszufinden, was JSON fehlt, damit wir es verbessern können. :)
Saeed Neamati
4
Eine Diskussion über die Unterschiede zwischen zwei Technologien, um festzustellen, wo Verbesserungen vorgenommen werden können, unterscheidet sich stark von der Frage, ob eine durch die andere ersetzt werden kann. Ersteres ist wissenschaftlicher als letzteres, was sich eher frustrierend anhört
Philip Regan
12
Das ist nicht hypothetisch. JSON scheint eine Funktion zu fehlen, die XML besitzt.
S.Lott

Antworten:

153

Das, was XML seine Kraft und Komplexität verleiht, sind gemischte Inhalte. Sachen wie diese:

<p>A <b>fine</b> mess we're in!</p>

Versuchen Sie nicht einmal, dies in JSON zu tun oder es in herkömmlichen Programmiersprachen zu manipulieren. Sie waren nicht für den Job konzipiert.

Diese Art von Frage kommt normalerweise von Leuten, die vergessen, dass das M in XML für Markup steht. Es ist eine Möglichkeit, einfachen Text zu verwenden und Markups hinzuzufügen, um strukturierten Text zu erstellen. Es ist auch für altmodische Daten recht praktisch, aber es ist nicht das, wofür es entwickelt wurde oder wo seine Hauptstärken liegen. Es gibt viele Möglichkeiten, mit einfachen Daten umzugehen, und JSON ist eine davon.

Michael Kay
quelle
33
+1: Dies ist das Unterscheidungsmerkmal. Hervorragender Punkt.
S.Lott
7
@Michael, du hast mir gerade etwas Wertvolles beigebracht. Das ist eine großartige Antwort. +1.
Saeed Neamati
9
Es gibt 3 Knoten Indie von P, A dem B-Element, und "Wir sind in Chaos!". Es ist ein Array, das Sie einfach in JSON erklären können.
Inkognito
5
@Rob Nein, aber ich erkläre, dass Sie die in HTML ausgedrückten Elemente klarer definieren und möglicherweise schneller über JSON analysieren können (da weniger Textanalyse erforderlich ist, um die verschiedenen Knotentypen zu finden). Wenn HTML JSON-ML wäre, könnten wir mehr Entwickler haben, die das DOM, die Textknoten und die Bindungen tatsächlich verstehen.
Inkognito
5
@ByrneReese: Ja, es ist XML und ja, es ist gültig. Dass es auch HTML ist, ist nebensächlich; Tatsächlich ist XHTML auch gültiges XML. :-)
Martijn
31

Der Hauptunterschied liegt meiner Meinung nach in der Tatsache, dass XML so konzipiert ist, dass es sich selbst mit seinen dtds und allem erklärt.

Bei JSON müssen Sie eine Menge von den Daten annehmen, die Sie erhalten.

Maarten van Leunen
quelle
7
"XML ist so konzipiert, dass es sich selbst erklärt". Können Sie einen Link oder eine Referenz dafür bereitstellen? Ich sehe es nicht in den W3C-Standards für XML, und ich frage mich, woher dieser Begriff kommt. Ich bin eher eine urbane Legende als ein erklärtes Designziel.
S.Lott
6
@ S.Lott: Ich denke, was er damit meint, ist die Natur von XML-Tags, die an und für sich selbst ermöglicht, dass getaggte Inhalte selbsterklärend sind, dh DTDs sind optional, so dass wohlgeformtes XML ohne eines analysiert werden kann. Aber ich stimme Ihrer Meinung zu, da JSON technisch gesehen über die gleichen Fähigkeiten verfügt, sodass ich nicht sehe, dass die Selbsterklärung der Hauptunterschied ist (ich bin mir nicht sicher, warum dies immer wieder zur Debatte steht), sondern vielmehr Michael Kay ist mehr auf dem Prüfstand.
Philip Regan
5
@S.Lott hat zugestimmt. Ich muss sagen, dass der JSON hier json.org/example.html aufgrund seiner mangelnden Ausführlichkeit leichter zu verstehen und besser selbst zu dokumentieren ist als der zugehörige XML-Code.
Doug T.
4
@Michael Borgwardt: Ohne eine vollständige XSD (einschließlich einer Art Ontologie-Unterstützung) sagen mir Tag-Namen nichts. "sinnvoll" ist im Allgemeinen schwer zu erreichen. Das lässt mich unklar, was "selbsterklärend" in der Antwort bedeuten soll. Und ich habe keine Beweise dafür, dass es sogar ein Designziel für XML war.
S.Lott
4
@Philip Regan: Wie bei "selbsterklärendem Code" scheint es kein Merkmal von XML zu sein. Wenn es nur ein universelles Implementierungsziel ist, das für alle Softwaresprachen gilt (Code, Datenzugriff, Markup, was auch immer), sollten die Leute es vielleicht nicht speziell für XML erwähnen.
S.Lott
21

Eine wörtliche Übersetzung in JSON ist oft weniger prägnant und weniger klar. Erwägen:

<foo>
   <x:bar x:prop1="g">
      <quuz />
   </bar>
</foo>

Die effektivste JSON-Darstellung, die ich je gesehen habe:

{"localName":"foo",
 "children": // you need to have a special array to hold all children
 [
    {"localName": "bar",
     "namespace": "x"
        // once again, to ensure that there are no collisions,
        // attributes should be brought out into their own JSON structure 
        "attributes":[
            {"localName":"prop1",
             "namespace":"x",
             "value":"g"}
        ],
         "children":[
             {"name":"quux"}
         ]
     }
 ]}

Stellen Sie sich das für eine ganze XML-Datei vor. Ich sage nicht, dass JSON seinen Platz nicht hat, aber XML sollte nicht ausgeschlossen werden.

cwallenpoole
quelle
8
Betrachten Sie nun SXML:(foo (x:bar (@ (x:prop1 "g")) (quuz)))
SK-logic
2
@ SK-Logic: Das ist großartig für ein triviales Beispiel, aber ich könnte mir nicht vorstellen, tief verschachtelte, gemischte Inhalte - wie ein Buch - damit zu machen. Ich denke, SXML ist genauso eine akademische Übung wie alles andere.
Philip Regan
3
@Philip Regan: Wie kann es schwieriger sein, einen S-Exp zu schreiben, als Chevronitis zu verwenden, wenn es sich um eine triviale 1: 1-Transformation in eine weniger ausführliche Form handelt?
Maaartinus
@maartinus: Mein Fachgebiet ist das Veröffentlichen von Büchern: Lehrbücher jeglicher Art sind tiefe, komplexe Biester mit einer Vielzahl von Inhalten, die eine explizite Verwaltung erfordern. DocBook und DITA sind viel besser lesbar als das oben angegebene Beispiel.
Philip Regan
1
@Philip Regan, SXML ist im Gegensatz zu XML sehr einfach zu bearbeiten. Und natürlich ist es eine viel bessere Wahl für Protokolle, ganz zu schweigen von der Überlegenheit der verfügbaren Werkzeuge.
SK-logic
14

JSON und XML sind beide Möglichkeiten zum Formatieren von Daten. Beide sind in der Lage, das perfekt zu machen. Kann JSON also alles tun, was XML leistet? Ja.

Aber ... Eine relevantere Frage ist möglicherweise nicht, was XML / JSON kann, sondern was Sie mit XML / JSON tun können.

Es gibt einige Dinge, die Sie mit XML tun können, von denen ich glaube, dass Sie sie mit JSON nicht können, z. B. die Übersetzung mit XLST, die Suche mit XPath und die Validierung mit Schemata. Alles sehr, sehr nützlich.

Qwerky
quelle
5
Mit Ausnahme von gemischten Inhalten, in denen die Daten Tags enthalten. JSON macht das überhaupt nicht gut.
S.Lott
11

XSLT bietet viele Funktionen , die mit JSON möglicherweise nicht möglich sind. Wenn sie also nicht funktional gleichwertig sind, können sie sich nicht gegenseitig ersetzen.

StuperUser
quelle
3
Das heißt, Sie könnten eine andere Sprache verwenden, um JSON zu deserialisieren, zu manipulieren und zu serialisieren, und XSLT ist kein XML, daher ist dieser Punkt eigentlich umstritten.
StuperUser
3
XSLT ist XML - siehe Schema hier
Treecoder
Danke @greengit, ich habe mich nur kurz damit auseinandergesetzt, die Antwort aktualisiert.
StuperUser
2
@StuperUser: Wie könnte es mit JSON "unmöglich" sein ? Es ist nur eine Transformation, vielleicht fehlen die Werkzeuge noch. Oder hängt das Problem mit dem Fehlen von Attributen in JSON zusammen?
Maaartinus
1
@StuperUser: XSLT ist eine Sprache (Teilmenge von XML), für die einige Interpreter in mindestens einer anderen Sprache geschrieben wurden (wahrscheinlich in C, Java, ...). Dasselbe könnte für JSON gemacht werden (einige JSON-T definieren, den Interpreter schreiben), nicht wahr?
Maaartinus
8

Fakt ist, wir werden lange mit beiden leben müssen, und ein JSON-Fan zu sein, wird als "schädlich" angesehen.

Scott C Wilson
quelle
7

JSON ist ziemlich neu und wird von älteren Systemen nicht unterstützt. Das Aktualisieren älterer Systeme ist teuer und führt zu Fehlern. JSON wird XML in naher Zukunft nicht ersetzen.

Tom Squires
quelle
2
Danke für deine Antwort. Was ich vorhabe, ist eher eine technische Überprüfung als eine Umsetzungsstrategie. Ich möchte zum Beispiel nur wissen, ob wir bei neuen Versionen dieser Legacy-Systeme XML vollständig löschen und JSON verwenden können. Wenn nicht, was vermissen wir in JSON?
Saeed Neamati
Andererseits habe ich in den letzten Jahren kein XML verwendet, nur JSON. Und gute Befreiung. Natürlich ist XML unternehmerischer. Das ist gut für die Arbeitsplatzsicherheit, nicht so gut für die Effizienz.
gnasher729
6

Ich würde sagen, dass Cwallenpoole einen hervorragenden Punkt macht. Während die meisten XML- Dateien in JSON übersetzt werden können , ist es ein separater Punkt, ob dies besser ist.

JSON eignet sich für Datenstrukturen, die mindestens genauso gut wie XML und wahrscheinlich auch besser sind, aber XML liest sich beim Markieren von Textdokumenten viel natürlicher als JSON, wenn Tags in einem größeren Textfluss verwendet werden, anstatt einfach eine Hierarchie abzugrenzen von Feldern.

Während HTML 5 möglicherweise einen eigenen Parser hat, bleiben Anwendungen wie DocBook erhalten.

ssokolow
quelle
JSON kann natürlich Zeichenfolgen enthalten, die HTML enthalten können.
gnasher729
6

Das hängt von der Domain ab. In Bezug auf Webdienste? Absolut. Es ist absolut beschämend, dass Anbieter immer noch SOAP auf ihre Kunden ausüben. REST + JSON den ganzen Weg.

Wenn Sie über komplexe, strukturierte Daten mit Stilinformationen wie Docbook oder einer anderen Implementierung sprechen? Das ist eine richtige Domain für XML.

Jason Lewis
quelle
4

Warum sollten Sie sich auf JSON beschränken, wenn YAML eine super Menge und viel ausdrucksvoller und daher leistungsfähiger als XML oder JSON ist?

Das heißt, wenn Sie die richtigen Serialisierungs-Frameworks verwenden, sollten Sie in der Lage sein, alle oben genannten Formate mit ein paar einfachen Codezeilen zu serialisieren und zu de-serialisieren.


quelle
3

Es wird hässlich, wenn Sie versuchen, diese beiden Objekte in JSON zu modellieren:

<customer><name>John Doe</name></customer>
<employee><name>John Doe</name</employee>

Mit JSON, wie es in 99% der Fälle verwendet wird, geht man verloren mit:

{ name: "John Doe" } 

Und jetzt müssen Sie einige Metastrukturen hinzufügen, und die ganze Schönheit von JSON ist verschwunden, während Sie die Nachteile haben.

Michal Till
quelle
11
Die JSON-Entsprechung zu Ihrer bereitgestellten XML lautet { customer: { name: 'John Doe' }, employee : { name: 'John Doe' } }. Also technisch gesehen ist deine Antwort nicht korrekt. :)
Saeed Neamati
Klar, das einzige, was in JSON fehlt, sind die Attribute, und sie sind für die Modellierung von Objekten nutzlos (im Gegensatz zu Markups). Manchmal werden Attribute als Abkürzung für das verwendet, was mit verschachtelten Daten ausgedrückt werden kann (z. B. in Konfigurationsdateien für den Ruhezustand). Konfigurationsdateien und Modellierungsobjekte sind zwei Stellen, an denen JSON eindeutig überlegen ist.
Maaartinus
2
@ SaeedNeamati, wie würden Sie <customer><name>John Doe</name></customer><customer><name>John Doe</name></customer>in JSON modellieren ?
Svick
6
{Kunden: [{Name: 'John Doe'}, {Name: 'John Doe'}]}?
Scrwtp
2
@Stijn - richtig, und das funktioniert, aber es bestätigt den Kommentar aus der ursprünglichen Antwort, dass "Sie einige Metastrukturen hinzufügen müssen", um bestimmte Dinge zu modellieren, die in XML natürlicher herausfallen.
Matt R
3

Ich weiß nicht, ob es eine solche Funktion für JSON gibt, aber in .NET können Sie zumindest XML anhand eines bestimmten Schemas validieren. Das ist in meinen Augen ein wertvoller Vorteil von XML.

Grant Palin
quelle
2
Auch json hat Schemata: json-schema.org
lordvlad