Ich bin mit der Definition der Kommunikation zwischen zwei Web-Anwendungen beauftragt. Ich habe mich für JSON entschieden. Wie häufig ist es, einen Wurzelknoten im JSON zu haben?Root Nodes in JSON
Sagen wir, wir haben ein Autoobjekt. Dies ist die JSON mit „Auto“ Knoten die Wurzel zu sein:
{"Car": {
"Make":"Mustang",
"YearBuilt":"1999"}}
So, jetzt lassen Sie uns sagen, dass ich einen Reifen bezwecken und da wir mit Root-Knoten werden die Standardisierung auf, das hat man auch, es zu haben.
Die Integration des Reifenobjekts JSON in das ursprüngliche Auto-Objekt zeigt, wie unhandlich es sein könnte.
{"Car": { "Make":"Mustang",
"YearBuilt":"1999",
"Tires": "[{"Tire": {"Make": "Brirdgestone", "Size":"15"}},
{"Tire": {"Make": "Brirdgestone", "Size":"15"}},
{"Tire": {"Make": "Bridgestone", "Size":"15"}},
{"Tire": {"Make": "Brirdgestone", "Size":"15"}}
]}}
So serialisiert in PHP, die Marke des ersten Reifen würde $object->Car->Tires[0]->Tire->Make
sein. Da gibt es diesen zusätzlichen Reifenniveau wegen des Wurzelknotens.
Wenn Tire nicht den Wurzelknoten hatte, könnte der Code viel schlanker sein.
{"Car": { "Make":"Mustang",
"YearBuilt":"1999",
"Tires": "[{ {"Make": "Bridgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}},
{"Make": "Brirdgestone", "Size":"15"}}]}}
In PHP gibt es weniger Verwirrung, weil es weniger Redundanz ist: Die Marke des ersten Reifens durch $object->Car->Tires[0]->Make
genannt wird Gibt es etwas schlecht durch keinen Root-Knoten mit? Ich mag es, den Wurzelknoten zu haben, weil er sich wie ein Klassenname verhält, aber unnötige Ebenen stören mich sehr und machen das Durchqueren komplexer.
Ich stimme zu. Root-Knoten würden den Code der konsumierenden App nur unnötig ausführlich machen. – Steve
Cool, vielen Dank. Ich dachte an einen Bereich, wo es wichtig wäre. Wenn die JSON-Spiegelung und das XML-Dokument vorhanden sind, sollten Sie mindestens eines für das Hauptobjekt hinzufügen, da Sie in XML ein Stammelement benötigen. Ein Kollege wies auch darauf hin, dass es für JSONP Callbacks wichtig ist und eine bessere Struktur wäre, wenn ich eine API erstellen würde. Zum Beispiel, Yahoo und ebay APIs wickeln alles um einen ResultSet-Knoten herum. Dadurch können Parser, die sich um Typen kümmern, das ResultSet an einen Objekttyp binden. –
Nun, ich bin sicher, Sie können sich UseCases vorstellen, wo es nützlich sein könnte. Aber auch wenn ich JSON in meinen Apps verwendete, hatte ich Callbacks, die wussten, wie sie mit den empfangenen Daten umgehen mussten, z. example.com/cars/find/id/123 würde Auto-Daten zurückgeben und mein Rückruf würde sie erstellen. – Gordon