3

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

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

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

直觉上我会假设答案是否定的,因为 JSON 规范将对象定义为“一组无序的名称/值对”。然而,JSON RFC (RFC 7159)这么说:

观察到 JSON 解析库在它们是否使对象成员的顺序对调用软件可见方面存在差异。

而且我还没有找到任何关于杰克逊如何处理这个问题的信息。

4

1 回答 1

3

查看Jackson 的源代码com.fasterxml.jackson.databind.node.ObjectNode(版本 2.5.0,您可以在网站上搜索不同的源代码),包含对象子项的地图LinkedHashMap属于文档所述的类型

此实现与 HashMap 的不同之处在于它维护一个双向链表,该列表贯穿其所有条目。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。

于 2017-03-27T06:56:45.727 回答