2017-03-25 1 views
0

Zum Beispiel, wenn ich die folgende JSON in eine JsonNode deserialisieren:Ist Jackson Deserialisierung in eine JsonNode Garantie Immobilienbestellung?

{ 
    "property1": 1, 
    "property2": 2, 
    "property3": 3 
} 

und durchqueren dann die Elemente mit JsonNode#fields, gibt es keine Garantie dafür, dass der Iterator die Eigenschaften in der Reihenfolge angezeigt werden können sie definiert wurden (dh property1 , Eigenschaft2, Eigenschaft3)?

Intuitiv würde ich annehmen, dass die Antwort nein ist, weil die JSON-Spezifikation Objekte als "eine ungeordnete Menge von Name/Wert-Paaren" definiert. Jedoch sagt JSON RFC (RFC 7159) diese:

JSON Parsen Bibliotheken beobachtet wurden, wie zu unterscheiden, ob nicht, dass sie die Reihenfolge der Objektelemente sichtbar zu nennen Software machen.

Und ich konnte keine Informationen darüber finden, wie Jackson damit umgeht.

Antwort

1

am source code of Jackson's com.fasterxml.jackson.databind.node.ObjectNode suchen (Version 2.5.0 können Sie auf der Website für einen anderen suchen), die Karte, die die Kinder des Objekts hält, ist vom Typ LinkedHashMap, wo die Dokumentation

Diese Implementierung unterscheidet sich sagt von HashMap, indem es eine doppelt verknüpfte Liste mit verwaltet, die alle Einträge durchläuft. Diese verknüpfte Liste definiert die Iterationsreihenfolge, normalerweise die Reihenfolge in welche Schlüssel in die Karte eingefügt wurden (Einfügereihenfolge).

+0

Dies ist ein Start, aber beantwortet nicht wirklich die Frage. Mit diesem Wissen, denke ich, wird meine Frage dann: "Garantiert Jackson das Einfügen von Eigenschaften in seine LinkedHashMap während der Deserialisierung?" –

+0

Ich sehe nicht, warum Jackson Dev eine solche Implementierung aus irgendeinem anderen Grund wählen würde –

Verwandte Themen