例如,如果我将以下JSON反序列化为JsonNode:
{
"property1": 1,
"property2": 2,
"property3": 3
}
然后使用JsonNode#fields遍历元素,是否可以保证迭代器将按照定义的顺序返回属性(即property1,property2,property3)?
直观地,我认为答案是否定的,因为JSON规范将对象定义为“一组无序的名称/值对”。但是,JSON RFC (RFC 7159)说:
已经观察到JSON解析库在是否存在时会有所不同 不是它们使对象成员的排序对调用可见 软件
我无法找到有关杰克逊如何处理此事的任何信息。
答案 0 :(得分:1)
查看source code of Jackson's com.fasterxml.jackson.databind.node.ObjectNode
(版本2.5.0,您可以在网站上搜索其他版本),保存对象子项的地图属于LinkedHashMap
类型,其中文件说
这个实现与HashMap的不同之处在于它维护了一个 贯穿其所有条目的双向链表。这有联系 list定义迭代排序,通常是顺序 哪些键被插入到地图中(插入顺序)。