Jackson 中的 ObjectNode 和 JsonNode 有什么区别?
What is the difference between ObjectNode and JsonNode in Jackson?
根据 JsonNode
的文档:
Most mutators, however, need to be accessed through specific sub-classes (such as ObjectNode
and ArrayNode).
但是我仍然感到困惑,因为一些 Whosebug 答案似乎可以互换使用它们。它们有什么不同的用途?
JsonNode
是 class 的基础 ObjectNode
和 ArrayNode
扩展。 JsonNode
表示任何有效的 Json 结构,而 ObjectNode
和 ArrayNode
分别是对象(又名映射)和数组的特定实现。
ArrayNode
有处理数组的特定方法,例如 get(index i)
例如您无法在 JsonNode
或 ObjectNode
中的特定索引处获取项目,但您可以在 ArrayNode
.
中获取
要交替使用 ObjectNode
和 JsonNode
来解决 OP 关于 Stack Overflow 答案的观点:您看到的混淆的一个可能来源是 JsonNode
implements most of the functionality of both ObjectNode
and ArrayNode
,大部分返回默认为 false
或 null
。 sub-types 然后重写它们各自的方法以正常工作(例如索引 ArrayNode
,命名访问 ObjectNode
)。 Javadoc 说:
As a general design rule, most accessors ("getters") are included in this [JsonNode] base class, to allow for traversing structure without type casts. Most mutators, however, need to be accessed through specific sub-classes (such as [ObjectNode] and [ArrayNode]). This seems sensible because proper type information is generally available when building or modifying trees, but less often when reading a tree (newly built from parsed JSON content)
"[T]o 允许在没有类型转换的情况下遍历结构" 是关键,这也是您经常使用 JsonNode
的原因时间,因为只要您调用的方法与实际解析到的对象数据的 sub-type 匹配,它们就会按预期工作。
根据 JsonNode
的文档:
Most mutators, however, need to be accessed through specific sub-classes (such as
ObjectNode
and ArrayNode).
但是我仍然感到困惑,因为一些 Whosebug 答案似乎可以互换使用它们。它们有什么不同的用途?
JsonNode
是 class 的基础 ObjectNode
和 ArrayNode
扩展。 JsonNode
表示任何有效的 Json 结构,而 ObjectNode
和 ArrayNode
分别是对象(又名映射)和数组的特定实现。
ArrayNode
有处理数组的特定方法,例如 get(index i)
例如您无法在 JsonNode
或 ObjectNode
中的特定索引处获取项目,但您可以在 ArrayNode
.
要交替使用 ObjectNode
和 JsonNode
来解决 OP 关于 Stack Overflow 答案的观点:您看到的混淆的一个可能来源是 JsonNode
implements most of the functionality of both ObjectNode
and ArrayNode
,大部分返回默认为 false
或 null
。 sub-types 然后重写它们各自的方法以正常工作(例如索引 ArrayNode
,命名访问 ObjectNode
)。 Javadoc 说:
As a general design rule, most accessors ("getters") are included in this [JsonNode] base class, to allow for traversing structure without type casts. Most mutators, however, need to be accessed through specific sub-classes (such as [ObjectNode] and [ArrayNode]). This seems sensible because proper type information is generally available when building or modifying trees, but less often when reading a tree (newly built from parsed JSON content)
"[T]o 允许在没有类型转换的情况下遍历结构" 是关键,这也是您经常使用 JsonNode
的原因时间,因为只要您调用的方法与实际解析到的对象数据的 sub-type 匹配,它们就会按预期工作。