Jackson中的ObjectNode和JsonNode有什么区别?
根据JsonNode
的文档:
然而,大多数赋值器需要通过特定的子类(例如
ObjectNode
和ArrayNode)来访问。
然而,我仍然感到困惑,因为一些堆栈溢出答案似乎可以互换使用它们。它们有什么不同的目的?
根据JsonNode
的文档:
然而,大多数赋值器需要通过特定的子类(例如
ObjectNode
和ArrayNode)来访问。
然而,我仍然感到困惑,因为一些堆栈溢出答案似乎可以互换使用它们。它们有什么不同的目的?
JsonNode
是一个基类,它和扩展。 表示任何有效的 Json 结构,而 分别是对象(又名映射)和数组的特定实现。ObjectNode
ArrayNode
JsonNode
ObjectNode
ArrayNode
ArrayNode
具有处理数组的特定方法,例如,您无法在 or 中的特定索引处获取项目,但您可以在 .get(index i)
JsonNode
ObjectNode
ArrayNode
为了解决OP关于堆栈溢出的问题,答案使用和互换:你看到的混乱的一个可能的根源是,它实现了ObjectNode
和ArrayNode
的大部分功能,大部分或默认返回。然后,子类型重写其各自的方法以正常工作(例如,索引 的 ,名为 access )。Javadoc 说:ObjectNode
JsonNode
JsonNode
false
null
ArrayNode
ObjectNode
作为一般设计规则,大多数访问器(“getters”)都包含在此 [JsonNode] 基类中,以允许在没有类型转换的情况下遍历结构。然而,大多数赋值器需要通过特定的子类(例如[ObjectNode]和[ArrayNode])进行访问。这似乎是明智的,因为在构建或修改树时通常可以使用正确的类型信息,但在读取树(根据解析的JSON内容新建)时则较少见。
“[T]o 允许在没有类型强制转换的情况下遍历结构”是关键,也是您经常可以一直使用的原因,因为只要您调用的方法与实际解析的对象数据的子类型匹配,它们就可以按预期工作。JsonNode