根据JsonNode
的文件:
然而,大多数mutator需要通过特定的子类(例如
ObjectNode
和ArrayNode)进行访问。
然而,我仍然感到困惑,因为一些stackoverflow答案似乎可以互换使用它们。他们有什么不同的目的?
答案 0 :(得分:43)
JsonNode
是ObjectNode
和ArrayNode
扩展的基类。 JsonNode
表示任何有效的Json结构,其中ObjectNode
和ArrayNode
分别是对象(即地图)和数组的特定实现。
ArrayNode
具有处理数组的特定方法,例如get(index i)
例如。您无法在JsonNode
或ObjectNode
中的特定索引处获取某个项目,但您可以在ArrayNode
中获取。
答案 1 :(得分:1)
要交替使用ObjectNode
和JsonNode
来解决OP关于堆栈溢出答案的观点:您可能会发现造成混淆的原因是JsonNode
implements most of the functionality of both ObjectNode
and ArrayNode
,主要返回{{默认为1}}或false
。然后,子类型会覆盖它们各自的方法以正常工作(例如,为null
编制索引,为ArrayNode
命名访问)。 Javadoc说:
作为一般设计规则,大多数访问器(“获取器”)都包含在此[JsonNode]基类中,以允许在不进行类型强制转换的情况下遍历结构。但是,大多数增变子需要通过特定的子类(例如[ObjectNode]和[ArrayNode])进行访问。这似乎是明智的,因为在构建或修改树时通常可以使用正确的类型信息,而在读取树(由解析的JSON内容新构建)时则很少使用
“ [T] o允许在不进行类型强制转换的情况下遍历结构” 是关键,并且这就是您经常可以不停使用ObjectNode
的原因,因为只要由于您要调用的方法与实际解析为对象数据的子类型匹配,因此它们可以按预期工作。