Welches JSON-Format ist die bessere Wahl für Schlüsselwertpaare und warum?
[{"key1": "value1"}, {"key2": "value2"}]
Oder:
[{"Name": "key1", "Value": "value1"}, {"Name": "key2", "Value": "value2"}]
Oder:
{"key1": "value1", "key2": "value2"}
Die erste Variante wirkt kompakter und "semantisch bedeutungsvoller". Die zweite Variante scheint gleichmäßiger strukturiert zu sein, was die Verarbeitung erleichtern könnte. Die 3. Variante wirkt noch semantischer.
Die Schlüsselwertpaare werden verwendet, um beliebige Daten an ein anderes Element anzuhängen. Die Daten müssen als JSON serialisiert werden, um sie durch ein System zu runden.
{"key1": "value1", "key2": "value2"}
?Antworten:
Ob Sie die erste oder die dritte Option auswählen, hängt von Ihrem Anwendungsfall ab. Wenn Sie viele verschiedene Instanzen desselben Typs modellieren, wählen Sie die erste aus. Zum Beispiel haben Sie eine Liste von Personen. Wenn Sie viele verschiedene Attribute einer Sache modellieren, wählen Sie die dritte. Sie können Schlüssel im ersten Format wiederholen lassen, aber nicht im dritten.
Die zweite Option ist schrecklich, und ich habe noch keinen geeigneten Anwendungsfall dafür gefunden. Der Grund, warum es schrecklich ist, dass es nicht nur ausführlicher ist, sondern dass es bei einstufigem JSON die automatische Konvertierung der meisten Bibliotheken in ein Wörterbuch / eine Map bricht. Bei tief verschachteltem JSON wird die XPath-ähnliche Abfrageschnittstelle unterbrochen.
Das macht es zu einem Problem, damit zu arbeiten. Wenn Sie Ihre Schlüssel zur Kompilierungszeit nicht kennen, benötigen Sie ein Wörterbuch oder eine XPath-Schnittstelle, da Sie diese nicht in eine Klasse konvertieren können. Es scheint jetzt vielleicht keine große Sache zu sein, aber je länger Sie ein Datenformat haben, desto schwieriger wird es, es zu ändern.
quelle
[{"key1": "value1", "key2": "value2"}]
. Das zweite Format besteht darin, den echten Schlüssel auf die rechte Seite zu setzen und einen anderen Schlüssel namens "Name" zu verwenden, um auf den echten Schlüssel zu verweisen, was das Parsen mit Standardwerkzeugen äußerst schwierig macht.Das 3. Format ist im Allgemeinen das beste. Hier ist jedoch ein Beispiel für etwas, das für das 1. Format geeignet ist:
Hier bezieht sich jedes Objekt auf eine separate Sache (und jedes Objekt verwendet dieselben Schlüssel wie die anderen, so dass sie nicht zusammengeführt werden konnten). Jedoch wird jedes Objekt in der Liste als gespeichert und
{ "username": "foo", "id": 1 }
nicht ,[{ "username": "foo" }, { "id": 1 }]
weil 1) es ist kürzer und 2) es mit einem Benutzernamen an eine Sache beziehen und eine ID, nicht eine Sache , mit einem Benutzernamen und eine andere Sache mit einer ID.Das Problem mit der zweiten Option ist, dass sie sowohl als JSON als auch zum Arbeiten sehr ausführlich wird. Es kann jedoch verwendet werden, wenn Sie Metainformationen über die Eigenschaft speichern müssen. Ein Beispiel:
Hier
mutable
bezieht sich auf einen hypothetischen Fall, ob Sie die Eigenschaft selbst ändern können, nicht das übergeordnete Objekt. Metainformationen wie diese ähneln denen von JavaScriptObject.defineProperty
, in denen "konfigurierbare", "aufzählbare" und "beschreibbare" Informationen zu einer Eigenschaft gespeichert sind.quelle
Sie sagen, dies sind Schlüssel / Wert-Paare. In diesem Fall verwenden Sie # 3: Wörterbuch der Schlüssel / Wert-Paare.
Wenn dies keine Schlüssel / Wert-Paare sind, nennen Sie sie nicht "Schlüssel" und "Werte" und verwenden Sie # 2, ein Array von Wörterbüchern mit beliebigen Inhalten.
Die Struktur 1 ist nur dumm, es sei denn, Sie benötigen Schlüssel / Wert-Paare, aber auch deren Reihenfolge. Was du selten tust.
quelle
Versetzen Sie sich in die Lage der Person, die den JSON erhält. Wenn ich den Schlüsselnamen nicht kenne, wie soll ich ihn mit dem ersten oder dem letzten Format abrufen? Sie können den json natürlich durchlaufen, aber da alle drei Formate das gleiche Ergebnis erzielen, ist es nur eine Frage der Syntax. Ich denke, dies ist die einzig sinnvolle Frage: Wenn Sie wissen, dass die Schlüsselnamen die erste oder letzte Option kompakter sind, ist die zweite Wahl verständlicher.
quelle