Ich finde, dass ein großer Vorteil von JSON gegenüber XML darin besteht, dass ich mich nicht entscheiden muss, wie die Daten formatiert werden sollen. Wie einige gezeigt haben, gibt es zahlreiche Möglichkeiten, selbst einfache Datenstrukturen in XML zu erstellen - als Elemente, als Attributwerte usw. Dann müssen Sie es dokumentieren, ein XML-Schema schreiben oder NG oder einen anderen Mist entspannen ... Es ist ein Durcheinander.
XML mag seine Vorzüge haben, aber für den grundlegenden Datenaustausch ist JSON viel kompakter und direkter. Als Python-Entwickler gibt es keine Impedanzfehlanpassung zwischen den einfachen Datentypen in JSON und in Python. Wenn ich also einen serverseitigen Handler für eine AJAX-Abfrage schreiben würde, in der nach den Schneebedingungen für ein bestimmtes Skigebiet gefragt wird, würde ich ein Wörterbuch wie folgt erstellen:
conditions = {
'new_snow_24': 5.0,
'new_snow_48': 8.5,
'base_depth': 88.0,
'comments': 'Deep and steep!',
'chains_required': True,
}
return simplejson.dumps(conditions) # Encode and dump `conditions` as a JSON string
Bei der Übersetzung über JSON (unter Verwendung einer Bibliothek wie 'simplejson' für Python) sieht die resultierende JSON-Struktur nahezu identisch aus (außer in JSON werden Boolesche Werte in Kleinbuchstaben geschrieben).
Das Dekodieren dieser Struktur erfordert nur einen JSON-Parser, unabhängig davon, ob es sich um Javascript oder Objective-C für eine native iPhone-App oder C # oder einen Python-Client handelt. Die Floats würden als Floats interpretiert, die Strings als Strings und die Booleschen als Boolesche Werte. Bei Verwendung der 'simplejson'-Bibliothek in Python simplejson.loads(some_json_string)
würde mir eine Anweisung eine vollständige Datenstruktur zurückgeben, wie ich sie gerade im obigen Beispiel erstellt habe.
Wenn ich XML schreiben würde, müsste ich mich entscheiden, ob ich Elemente oder Attribute ausführen möchte. Beide folgenden Punkte sind gültig:
<conditions>
<new-snow-24>5</new-snow-24>
<new-snow-48>8.5</new-snow-48>
<chains-required>yes</chains-required>
<comments>deep and steep!</comments>
</conditions>
<conditions newSnow24="5" newSnow48="8.5" chainsRequired="yes">
<comments>deep and steep!</comments>
</conditions>
Ich muss also nicht nur über die Daten nachdenken, die ich möglicherweise an den Client senden möchte, sondern auch darüber, wie ich sie formatieren soll. XML ist zwar einfacher als einfaches SGML, da es strengere Regeln enthält, bietet jedoch zu viele Möglichkeiten, um über diese Daten nachzudenken. Dann müsste ich es generieren. Ich konnte nicht einfach ein Python-Wörterbuch (oder eine andere einfache Datenstruktur) nehmen und sagen: "Mach dich selbst zu meinem XML". Ich konnte kein XML-Dokument erhalten und sofort sagen, dass Sie sich in Objekte und Datenstrukturen verwandeln sollen, ohne einen benutzerdefinierten Parser zu schreiben oder ohne den zusätzlichen Aufwand für XML Schema / Relax NG und andere solche Probleme zu erfordern.
Das kurze daran ist, dass es viel einfacher und direkter ist, Daten in JSON zu kodieren und zu dekodieren, insbesondere für den schnellen Austausch. Dies gilt möglicherweise eher für Personen mit einem dynamischen Sprachhintergrund, da die in JavaScript / JSON integrierten Basisdatentypen (Listen, Wörterbücher usw.) direkt denselben oder ähnlichen Datentypen in Python, Perl, Ruby usw. zugeordnet sind.