2017-03-25 1 views
0

Par exemple, si je désérialiser le JSON suivant dans un JsonNode:Est-ce que Jackson désériorisation dans une commande de propriété de garantie JsonNode?

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

puis parcourir les éléments avec JsonNode#fields, est-il une garantie que le iterator retourne les propriétés dans l'ordre qu'ils ont été définis (c.-à-property1 , propriété2, propriété3)?

Intuitivement je suppose que la réponse est non, parce que la spécification JSON définit les objets comme "un ensemble non ordonné de paires nom/valeur". CEPENDANT, JSON RFC (RFC 7159) dit ceci:

JSON bibliothèques analyse syntaxique ont été observées diffèrent quant à savoir si ou non ils font l'ordre des membres d'objets visibles à appeler logiciel.

Et je n'ai pas été en mesure de trouver des informations sur la façon dont Jackson gère cela.

Répondre

1

regardant la source code of Jackson's com.fasterxml.jackson.databind.node.ObjectNode (version 2.5.0, vous pouvez effectuer une recherche sur le site pour un différent), la carte qui détient les enfants de l'objet est de type LinkedHashMap où la documentation dit

Cela diffère de la mise en œuvre de HashMap en ce qu'il maintient une liste à double liaison qui traverse toutes ses entrées. Cette liste liée définit l'ordre d'itération, qui est normalement l'ordre dans les clés qui ont été insérées dans la carte (ordre d'insertion).

+0

Ceci est un début mais ne répond pas vraiment à la question. Avec cette connaissance, je suppose que ma question devient alors: «Est-ce que Jackson garantit l'insertion dans l'ordre des propriétés dans sa LinkedHashMap lors de la désérialisation? –

+0

Je ne vois pas pourquoi Jackson dev choisirait une telle implémentation pour toute autre raison –