JsonNode
是 ObjectNode
和 ArrayNode
扩展的基类。 JsonNode
表示任何有效的 Json 结构,而 ObjectNode
和 ArrayNode
分别是对象(也称为映射)和数组的特定实现。
ArrayNode
有处理数组的特定方法,例如 get(index i)
您无法在 JsonNode
或 ObjectNode
中获取特定索引处的项目,但可以在 ArrayNode
中获取。
为了解决OP关于Stack Overflow答案的观点,交替使用
ObjectNode
和JsonNode
:您看到的混乱的一个可能来源是JsonNode
实现了ObjectNode
和ArrayNode
的大部分功能,返回默认情况下主要是 false
或 null
。然后,子类型重写各自的方法以正常工作(例如,ArrayNode
的索引,ObjectNode
的命名访问)。 Javadoc 说:
作为一般设计规则,大多数访问器(“getters”)都包含在这个 [JsonNode] 基类中,以允许在没有类型转换的情况下遍历结构。然而,大多数修改器需要通过特定的子类(例如[ObjectNode]和[ArrayNode])来访问。这似乎是明智的,因为在构建或修改树时通常可以使用正确的类型信息,但在读取树(从解析的 JSON 内容新构建)时则很少使用
“[T]o 允许在没有类型转换的情况下遍历结构” 是关键,也是您经常可以一直使用
JsonNode
的原因,因为只要您调用的方法与对象数据的子类型实际上被解析成,它们按预期工作。
JsonNode
和 ObjectNode
都是 Jackson 库中的类,用于在 Java 中处理 JSON 数据。
JsonNode
是一个抽象类,表示 JSON 树中的节点。它可用于读取和浏览 JSON 数据,但不允许修改底层数据。因为它是抽象的,所以你不能直接创建 JsonNode
对象。相反,您可以使用其具体子类之一,例如 ObjectNode
、ArrayNode
或 ValueNode
。
ObjectNode
是 JsonNode
的子类,专门表示 JSON 对象。它允许您通过添加、删除或更改属性来修改底层 JSON 数据。 ObjectNode
是使用 JsonNodeFactory
类创建的,该类提供了创建不同类型的 JsonNode
对象的方法。
一般情况下,当你只需要读取JSON数据,而不需要修改它时,应该使用
JsonNode
。当您需要修改数据时,例如当您以编程方式构建 JSON 对象时,您可以使用 ObjectNode
。