杰克逊反序列化为JsonNode保证属性排序吗?

时间:2017-03-25 15:51:58

标签: java jackson jackson2

例如,如果我将以下JSON反序列化为JsonNode:

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

然后使用JsonNode#fields遍历元素,是否可以保证迭代器将按照定义的顺序返回属性(即property1,property2,property3)?

直观地,我认为答案是否定的,因为JSON规范将对象定义为“一组无序的名称/值对”。但是,JSON RFC (RFC 7159)说:

  

已经观察到JSON解析库在是否存在时会有所不同   不是它们使对象成员的排序对调用可见   软件

我无法找到有关杰克逊如何处理此事的任何信息。

1 个答案:

答案 0 :(得分:1)

查看source code of Jackson's com.fasterxml.jackson.databind.node.ObjectNode(版本2.5.0,您可以在网站上搜索其他版本),保存对象子项的地图属于LinkedHashMap类型,其中文件说

  

这个实现与HashMap的不同之处在于它维护了一个   贯穿其所有条目的双向链表。这有联系   list定义迭代排序,通常是顺序   哪些键被插入到地图中(插入顺序)。