Was ist der Unterschied zwischen JSON und XML?
Was ist der Unterschied zwischen JSON und XML?
Antworten:
Der grundlegende Unterschied, den keine andere Antwort erwähnt zu haben scheint, besteht darin, dass XML eine Auszeichnungssprache ist (wie es tatsächlich in seinem Namen heißt), während JSON eine Art der Darstellung von Objekten ist (wie auch in seinem Namen angegeben).
Eine Auszeichnungssprache ist eine Möglichkeit, dem frei fließenden Klartext zusätzliche Informationen hinzuzufügen, z
Here is some text.
Mit XML (unter Verwendung eines bestimmten Elementvokabulars) können Sie Folgendes setzen:
<Document>
<Paragraph Align="Center">
Here <Bold>is</Bold> some text.
</Paragraph>
</Document>
Dies macht Markup-Sprachen so nützlich für die Darstellung von Dokumenten.
Eine Objektnotation wie JSON ist nicht so flexibel. Aber das ist normalerweise eine gute Sache. Wenn Sie Objekte darstellen, benötigen Sie einfach keine zusätzliche Flexibilität. Um das obige Beispiel in JSON darzustellen, müssten Sie einige Probleme manuell lösen, die XML für Sie löst.
{
"Paragraphs": [
{
"align": "center",
"content": [
"Here ", {
"style" : "bold",
"content": [ "is" ]
},
" some text."
]
}
]
}
Es ist nicht so schön wie das XML, und der Grund dafür ist, dass wir versuchen, Markups mit einer Objektnotation zu erstellen. Wir müssen also einen Weg finden, um Textausschnitte mit "Inhalts" -Arrays zu verteilen, die eine Mischung aus Zeichenfolgen und verschachtelten Objekten enthalten können.
Wenn Sie dagegen eine typische Hierarchie von Objekten haben und diese in einem Stream darstellen möchten, ist JSON für diese Aufgabe besser geeignet als HTML.
{
"firstName": "Homer",
"lastName": "Simpson",
"relatives": [ "Grandpa", "Marge", "The Boy", "Lisa", "I think that's all of them" ]
}
Hier ist das logisch äquivalente XML:
<Person>
<FirstName>Homer</FirstName>
<LastName>Simpsons</LastName>
<Relatives>
<Relative>Grandpa</Relative>
<Relative>Marge</Relative>
<Relative>The Boy</Relative>
<Relative>Lisa</Relative>
<Relative>I think that's all of them</Relative>
</Relatives>
</Person>
JSON ähnelt eher den Datenstrukturen, die wir in Programmiersprachen deklarieren. Es hat auch weniger redundante Wiederholungen von Namen.
Vor allem aber hat es eine definierte Methode zur Unterscheidung zwischen einem "Datensatz" (Elemente ungeordnet, durch Namen gekennzeichnet) und einer "Liste" (Elemente geordnet, durch Position gekennzeichnet). Eine Objektnotation ist ohne eine solche Unterscheidung praktisch nutzlos. Und XML hat keinen solchen Unterschied! In meinem XML-Beispiel <Person>
handelt es sich um einen Datensatz und <Relatives>
eine Liste, die jedoch durch die Syntax nicht als solche gekennzeichnet sind.
Stattdessen hat XML "Elemente" gegenüber "Attributen". Dies sieht nach der gleichen Art der Unterscheidung aus, ist es jedoch nicht, da Attribute nur Zeichenfolgenwerte haben können. Sie können keine verschachtelten Objekte sein. Ich hätte diese Idee also nicht anwenden können <Person>
, da ich mich nicht <Relatives>
in eine einzelne Zeichenfolge verwandeln sollte .
Mithilfe eines externen Schemas oder zusätzlicher benutzerdefinierter Attribute können Sie eine Unterscheidung zwischen Listen und Datensätzen in XML formalisieren. Der Vorteil von JSON besteht darin, dass in die Low-Level-Syntax diese Unterscheidung integriert ist, sodass sie sehr prägnant und universell ist. Dies bedeutet, dass JSON standardmäßig "selbstbeschreibender" ist, was ein wichtiges Ziel beider Formate ist.
Daher sollte JSON die erste Wahl für die Objektnotation sein, bei der der Sweet Spot von XML das Dokumentmarkup ist.
Leider haben wir für XML bereits HTML als weltweit führende Rich-Text-Markup-Sprache. Es wurde versucht, HTML in Bezug auf XML neu zu formulieren, aber dies hat keinen großen Vorteil.
Daher sollte XML (meiner Meinung nach) eine ziemlich begrenzte Nischentechnologie sein, die sich am besten nur zum Erfinden Ihrer eigenen Rich-Text-Markup-Sprachen eignet, wenn Sie aus irgendeinem Grund kein HTML verwenden möchten. Das Problem war, dass es 1998 immer noch viel Hype um das Web gab und XML aufgrund seiner oberflächlichen Ähnlichkeit mit HTML populär wurde. Es war eine seltsame Designentscheidung, auf hierarchische Daten eine Syntax anzuwenden, die tatsächlich für ein bequemes Markup entwickelt wurde.
Sie sind beide Datenformate für hierarchische Daten. Obwohl die Syntax sehr unterschiedlich ist, ist die Struktur ähnlich. Beispiel:
JSON:
{
"persons": [
{
"name": "Ford Prefect",
"gender": "male"
},
{
"name": "Arthur Dent",
"gender": "male"
},
{
"name": "Tricia McMillan",
"gender": "female"
}
]
}
XML:
<persons>
<person>
<name>Ford Prefect</name>
<gender>male</gender>
</person>
<person>
<name>Arthur Dent</name>
<gender>male</gender>
</person>
<person>
<name>Tricia McMillan</name>
<gender>female</gender>
</person>
</persons>
Das XML-Format ist jedoch weiter fortgeschritten als im Beispiel gezeigt. Sie können beispielsweise jedem Element Attribute hinzufügen und Namespaces zum Partitionieren von Elementen verwenden. Es gibt auch Standards zum Definieren des Formats einer XML-Datei, die XPATH-Sprache zum Abfragen von XML-Daten und XSLT zum Umwandeln von XML in Präsentationsdaten.
Das XML-Format gibt es schon seit einiger Zeit, daher wurde eine Menge Software dafür entwickelt. Das JSON-Format ist ziemlich neu, daher wird es viel weniger unterstützt.
Während XML als eigenständiges Datenformat entwickelt wurde, wurde JSON speziell für die Verwendung mit Javascript und AJAX entwickelt. Das Format entspricht also genau einem Javascript-Literalobjekt (dh es ist eine Teilmenge des Javascript-Codes, wie dies beispielsweise möglich ist) keine Ausdrücke zur Bestimmung von Werten enthalten).
Der Unterschied zwischen XML und JSON besteht darin, dass XML eine Metasprache / Auszeichnungssprache und JSON ein leichter Datenaustausch ist. Das heißt, die XML-Syntax wurde speziell entwickelt, um keine inhärente Semantik zu haben. Bestimmte Elementnamen bedeuten nichts, bis eine bestimmte Verarbeitungsanwendung sie auf eine bestimmte Weise verarbeitet. Im Gegensatz dazu verfügt die JSON-Syntax über eine spezifische Semantik, die in Sachen zwischen {} ein Objekt, Sachen zwischen [] ein Array usw. eingebaut ist.
Ein JSON-Parser weiß daher genau, was jedes JSON-Dokument bedeutet. Ein XML-Parser kann nur Markups von Daten trennen. Um mit der Bedeutung eines XML-Dokuments umgehen zu können, müssen Sie zusätzlichen Code schreiben.
Lassen Sie mich zur Veranschaulichung Guffas Beispiel ausleihen:
{ "persons": [
{
"name": "Ford Prefect",
"gender": "male"
},
{
"name": "Arthur Dent",
"gender": "male"
},
{
"name": "Tricia McMillan",
"gender": "female"
} ] }
Das von ihm angegebene XML-Äquivalent ist nicht dasselbe, da das JSON-Beispiel zwar semantisch vollständig ist, das XML jedoch auf eine bestimmte Weise interpretiert werden muss, um den gleichen Effekt zu erzielen. Tatsächlich verwendet JSON als Beispiel eine etablierte Markup-Sprache, deren Semantik bereits bekannt ist, während das XML-Beispiel eine brandneue Markup-Sprache ohne vordefinierte Semantik erstellt.
Ein besseres XML-Äquivalent wäre die Definition einer (fiktiven) XJSON-Sprache mit derselben Semantik wie JSON, jedoch unter Verwendung der XML-Syntax. Es könnte ungefähr so aussehen:
<xjson>
<object>
<name>persons</name>
<value>
<array>
<object>
<value>Ford Prefect</value>
<gender>male</gender>
</object>
<object>
<value>Arthur Dent</value>
<gender>male</gender>
</object>
<object>
<value>Tricia McMillan</value>
<gender>female</gender>
</object>
</array>
</value>
</object>
</xjson>
Sobald Sie einen XJSON-Prozessor geschrieben haben, kann er genau das tun, was der JSON-Prozessor für alle Datentypen tut, die JSON darstellen kann, und Sie können Daten verlustfrei zwischen JSON und XJSON übersetzen.
Sich zu beschweren, dass XML nicht die gleiche Semantik wie JSON hat, bedeutet, den Punkt zu verfehlen. Die XML-Syntax ist von Natur aus semantikfrei. Der Punkt besteht darin, eine zugrunde liegende Syntax bereitzustellen, mit der Markup-Sprachen mit jeder gewünschten Semantik erstellt werden können. Dies macht XML ideal für die Erstellung von Ad-hoc-Daten- und Dokumentformaten, da Sie keine Parser für sie erstellen müssen, sondern nur einen Prozessor für sie schreiben müssen.
Der Nachteil von XML ist jedoch, dass die Syntax ausführlich ist. Für jede Markup-Sprache, die Sie erstellen möchten, können Sie eine viel prägnantere Syntax entwickeln, die die bestimmte Semantik Ihrer bestimmten Sprache ausdrückt. Daher ist die JSON-Syntax viel kompakter als mein hypothetisches XJSON oben.
Wenn sich daraus ergibt, dass für wirklich weit verbreitete Datenformate die zusätzliche Zeit, die zum Erstellen einer eindeutigen Syntax und zum Schreiben eines Parsers für diese Syntax erforderlich ist, durch die größere Prägnanz und intuitivere Syntax der benutzerdefinierten Auszeichnungssprache ausgeglichen wird. Daraus folgt auch, dass es häufig sinnvoller ist, JSON mit seiner etablierten Semantik zu verwenden, als viele XML-Markup-Sprachen zu erstellen, für die Sie dann die Semantik implementieren müssen.
Daraus folgt auch, dass es sinnvoll ist, bestimmte Arten von Sprachen und Protokollen in XML zu prototypisieren, aber sobald die Sprache oder das Protokoll allgemein verwendet wird, über eine kompaktere und ausdrucksstärkere benutzerdefinierte Syntax nachzudenken.
Als Randnotiz ist es interessant, dass SGML dies erkannt und einen Mechanismus zum Festlegen eines reduzierten Markups für ein SGML-Dokument bereitgestellt hat. Auf diese Weise können Sie tatsächlich eine SGML-DTD für die JSON-Syntax schreiben, mit der ein JSON-Dokument von einem SGML-Parser gelesen werden kann. XML hat diese Funktion entfernt. Wenn Sie heute eine kompaktere Syntax für eine bestimmte Auszeichnungssprache wünschen, müssen Sie XML wie JSON zurücklassen.
Sie sind zwei Formate der Darstellung von Informationen. Während JSON kompakter gestaltet wurde, war XML besser lesbar.
XML verwendet Tag-Strukturen zum Präsentieren von Elementen, z. B.
<tag>item</tag>
ist ein XML-Dokument eine Reihe von Tags, die ineinander verschachtelt sind. Und die JSON-Syntax sieht aus wie eine Konstruktion aus der Javascript-Sprache, mit allen Dingen wie Listen und Wörterbüchern:
{
'attrib' : 'value',
'array' : [1, 2, 3]
}
Wenn Sie also JSON verwenden, ist es wirklich einfach, JSON-Zeichenfolgen in vielen Skriptsprachen zu verwenden, insbesondere in Javascript und Python.