Was ist der Unterschied zwischen json und xml [geschlossen]

75

Was ist der Unterschied zwischen JSON und XML?

pia
quelle
1
Mögliches Duplikat von stackoverflow.com/questions/453158/…
ACP
2
@ Pandiya: Diese Frage ist viel spezialisierter als diese. Ich zähle es nicht als Trottel.
Charles Stewart
@pia, könnten Sie bitte etwas näher auf Ihre Frage eingehen? Ich denke, es ist eine gute Frage, aber die Formatierung ist nicht optimal und sehr kurz - noch nicht genug für eine +1.
Mafu
Der Hauptunterschied besteht darin, dass die Leute endlos über die "richtige" Art der Verwendung von XML streiten können. Aber JSON hat keine solchen Vorwände. Danach ist es wie Cola gegen Pepsi, als ob es einen Unterschied gibt. Sez mich!
David van Brink

Antworten:

163

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.

Daniel Earwicker
quelle
8
Zwei Abstimmungen, keine Kommentare! So ist das Leben.
Daniel Earwicker
1
@ Daniel: Welche Abstimmungen? Ich sehe keine. Wenn Sie nach Sympathiestimmen fischen, sollten Sie zumindest einen Grund haben ...
Guffa
2
@Tomer Gable - Sie müssen den Teil "Durch Verwendung eines externen Schemas ..." verpasst haben. Und XSLT ist als XML-Anwendung noch weniger sinnvoll als die Datenmodellierung. Tatsächlich haben sie betrogen, indem sie bedeutende neue Syntaxen erfunden haben, die in Attributzeichenfolgen anwendbar sind, so dass es nicht wirklich XML-basiert ist. Zu sagen, dass JSON zusätzliche Komponenten erfordern würde, ist ein seltsamer Punkt: Alle Dinge, die Sie XML gutschreiben, sind auch zusätzliche Komponenten.
Daniel Earwicker
4
Dies war offensichtlich eine sehr konstruktive Antwort (und Frage) und hätte nicht geschlossen werden dürfen. Stimmen Sie erneut -1 für die Mods ab.
RCD
4
Es war äußerst hilfreich, erneut zu wiederholen und zu erklären, dass XML tatsächlich eine Auszeichnungssprache anstelle eines Datenformats ist. Danke, dass du das geschrieben hast!
Jrahhali
27

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).

Guffa
quelle
2
"Das Format ist genau das gleiche wie bei einem Javascript-Literalobjekt." - Nicht genau, JSON-Texte sind eine Teilmenge von JS-Objektliteralen.
Daniel Earwicker
@ Daniel: Natürlich ist es eine Teilmenge, Sie können natürlich nichts schreiben, was Sie in ein Javascript können, wie zum Beispiel eine Funktion aufrufen, um einen Wert für ein Mitglied zu erhalten. Haben Sie deshalb die Antwort abgelehnt?
Guffa
1
Argh ... Ich wollte dich eigentlich positiv bewerten, jetzt kann ich es SO nicht reparieren, es sei denn, du machst eine Bearbeitung. Aktivieren Sie "genau das gleiche wie a" bis "eine Teilmenge des Formats von a" und ich werde es so schnell wie möglich beheben.
Daniel Earwicker
22

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.

Mark Baker
quelle
Kann XML die Mehrdeutigkeit der Folgen von Name / Wert-Paaren unter Ihrem Objektknoten in XJSON verarbeiten? Ich würde denken, es müsste eine Art Hinweis darauf geben, welcher Name zu welchem ​​Wert gehört, entweder durch Hinzufügen einer anderen Ebene ("Attribut" oder "Eigenschaft" oder eine solche) oder durch Hinzufügen eines gemeinsamen Attributs zwischen jedem Namen und Wert?
Andere Antworten nennen XML eine Auszeichnungssprache und JSON ein Präsentationsformat. Jetzt sagen Sie, JSON ist die Auszeichnungssprache und XML ist tatsächlich eine Metasprache, was auch immer das bedeutet. Können Sie bitte klarstellen? Was antworte ich, wenn mich jemand in einem Interview danach fragt?
Harsha_K
4

Es gibt zwei verschiedene Arten der Darstellung von Daten, aber sie sind ziemlich unterschiedlich. Die Wikipedia - Seiten für JSON und XML geben einige Beispiele für jeden, und es gibt einen Vergleich Absatz

Michael Mrozek
quelle
3

Sie sind zwei Formate der Darstellung von Informationen. Während JSON kompakter gestaltet wurde, war XML besser lesbar.

Fitzchak Yitzchaki
quelle
3
Ja, offensichtlich zwei verschiedene Darstellungen. Aber ich denke nicht, dass XML von beiden als besser lesbar angesehen wird. JSON ist normalerweise etwas kompakter, aber ich denke nicht, dass dies ein wichtiges Designkriterium war. Vielmehr Lesbarkeit, Einfachheit und Benutzerfreundlichkeit (insbesondere aus Javascript). Noch wichtiger ist, dass zwei tatsächlich eine ganz andere logische Struktur haben: XML ist ein Inline-Markup-Format mit hierarchischem Modell; und JSON ist die Objektnotation mit dem Objekt- / Rahmen- / Diagrammmodell (obwohl 'Diagramm' möglicherweise übertrieben ist, da es kein Konzept der Objektidentität hat).
StaxMan
Vielleicht ist es eine späte Antwort, aber ich frage mich, warum die obige Antwort abgelehnt wurde. (Ich sollte Meinung sagen anstatt antworten). Was @StaxMan sagte, ist auch eine persönliche Meinung (selbst das kann durch Worte wie " Ich glaube nicht, dass das ein wichtiges Designkriterium war) bewiesen werden .
Stunner
In der ursprünglichen Antwort wurde nichts angegeben, was die Behauptung stützen könnte, dass "JSON kompakter, XML besser lesbar" wäre, wenn ich es auf DV hätte (ich habe es nicht getan); und es wurde kein grundlegenderer Unterschied erwähnt.
StaxMan
2

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.

Enchantner
quelle
1
Auf hoher Ebene ja, aber Ihr Beispiel ist nicht gültig JSON: Feldnamen müssen in doppelte Anführungszeichen gesetzt werden. Gleiches gilt für String-Werte.
StaxMan
1
Ups, sorry, es ist jetzt behoben :)
Enchantner