Jackson中的ObjectNode和JsonNode有什么区别?

问题描述 投票:0回答:3

根据

JsonNode
的文档:

但是,大多数修改器需要通过特定的子类(例如

ObjectNode
和 ArrayNode)来访问。

但是我仍然很困惑,因为一些 stackoverflow 答案似乎可以互换使用它们。它们有什么不同的目的?

java json jackson jackson2
3个回答
103
投票

JsonNode
ObjectNode
ArrayNode
扩展的基类。
JsonNode
表示任何有效的 Json 结构,而
ObjectNode
ArrayNode
分别是对象(也称为映射)和数组的特定实现。

ArrayNode
有处理数组的特定方法,例如
get(index i)
您无法在
JsonNode
ObjectNode
中获取特定索引处的项目,但可以在
ArrayNode
中获取。


1
投票

为了解决OP关于Stack Overflow答案的观点,交替使用

ObjectNode
JsonNode
:您看到的混乱的一个可能来源是
JsonNode
实现了
ObjectNode
ArrayNode
的大部分功能,返回默认情况下主要是
false
null
。然后,子类型重写各自的方法以正常工作(例如,
ArrayNode
的索引,
ObjectNode
的命名访问)。 Javadoc 说:

作为一般设计规则,大多数访问器(“getters”)都包含在这个 [JsonNode] 基类中,以允许在没有类型转换的情况下遍历结构。然而,大多数修改器需要通过特定的子类(例如[ObjectNode]和[ArrayNode])来访问。这似乎是明智的,因为在构建或修改树时通常可以使用正确的类型信息,但在读取树(从解析的 JSON 内容新构建)时则很少使用

“[T]o 允许在没有类型转换的情况下遍历结构” 是关键,也是您经常可以一直使用

JsonNode
的原因,因为只要您调用的方法与对象数据的子类型实际上被解析成,它们按预期工作。


0
投票

JsonNode
ObjectNode
都是 Jackson 库中的类,用于在 Java 中处理 JSON 数据。

JsonNode
是一个抽象类,表示 JSON 树中的节点。它可用于读取和浏览 JSON 数据,但不允许修改底层数据。因为它是抽象的,所以你不能直接创建
JsonNode
对象。相反,您可以使用其具体子类之一,例如
ObjectNode
ArrayNode
ValueNode

ObjectNode
JsonNode
的子类,专门表示 JSON 对象。它允许您通过添加、删除或更改属性来修改底层 JSON 数据。
ObjectNode
是使用
JsonNodeFactory
类创建的,该类提供了创建不同类型的
JsonNode
对象的方法。

一般情况下,当你只需要读取JSON数据,而不需要修改它时,应该使用

JsonNode
。当您需要修改数据时,例如当您以编程方式构建 JSON 对象时,您可以使用
ObjectNode

© www.soinside.com 2019 - 2024. All rights reserved.