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

时间:2016-08-01 18:40:39

标签: java json jackson jackson2

根据JsonNode的文件:

  

然而,大多数mutator需要通过特定的子类(例如ObjectNode和ArrayNode)进行访问。

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

2 个答案:

答案 0 :(得分:43)

JsonNodeObjectNodeArrayNode扩展的基类。 JsonNode表示任何有效的Json结构,其中ObjectNodeArrayNode分别是对象(即地图)和数组的特定实现。

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

答案 1 :(得分:1)

要交替使用ObjectNodeJsonNode来解决OP关于堆栈溢出答案的观点:您可能会发现造成混淆的原因是JsonNode implements most of the functionality of both ObjectNode and ArrayNode,主要返回{{默认为1}}或false。然后,子类型会覆盖它们各自的方法以正常工作(例如,为null编制索引,为ArrayNode命名访问)。 Javadoc说:

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

“ [T] o允许在不进行类型强制转换的情况下遍历结构” 是关键,并且这就是您经常可以不停使用ObjectNode的原因,因为只要由于您要调用的方法与实际解析为对象数据的子类型匹配,因此它们可以按预期工作。