JsonNode
的文档:
然而,我仍然感到困惑,因为一些stackoverflow答案似乎在使用它们时相当可互换的。它们有什么不同的用途?然而,大多数mutators需要通过特定的子类(例如
ObjectNode
和ArrayNode)来访问。
JsonNode
的文档:
然而,我仍然感到困惑,因为一些stackoverflow答案似乎在使用它们时相当可互换的。它们有什么不同的用途?然而,大多数mutators需要通过特定的子类(例如
ObjectNode
和ArrayNode)来访问。
JsonNode
是一个基类,ObjectNode
和ArrayNode
都是其扩展。它能够表示任何有效的Json结构,而ObjectNode
和ArrayNode
分别是对象(也称为映射)和数组的特定实现。
ArrayNode
具有特定处理数组的方法,例如get(index i)
。例如,您无法在JsonNode
或ObjectNode
中获取特定索引处的项,但可以在ArrayNode
中获取。
针对OP关于Stack Overflow答案中交替使用ObjectNode
和JsonNode
的观点:你看到混淆的可能原因是JsonNode
实现了ObjectNode
和ArrayNode
的大部分功能, 默认情况下返回false
或null
。然后,子类型覆盖其各自的方法以正确工作(例如,ArrayNode
进行索引,ObjectNode
进行命名访问)。Javadoc说:
"允许在不进行类型转换的情况下遍历结构"是关键,这也是你通常可以一直使用作为一般的设计规则,大多数访问器(“getter”)都包含在此[JsonNode]基类中,以允许在不进行类型转换的情况下遍历结构。然而,大多数变更器需要通过特定的子类(例如[ObjectNode]和[ArrayNode])访问。这似乎很合理,因为在构建或修改树时通常可以获得正确的类型信息,但在读取从解析JSON内容新构建的树时很少有。
JsonNode
的原因,因为只要你调用的方法与实际解析数据的子类型匹配,它们就会按预期工作。"JsonNode
和ObjectNode
都是Jackson库中用于在Java中处理JSON数据的类。
JsonNode
是一个抽象类,表示JSON树中的一个节点。它可以用于读取和浏览JSON数据,但不允许修改底层数据。由于它是抽象的,因此无法直接创建JsonNode
对象。相反,您可以使用其具体子类之一,例如ObjectNode
、ArrayNode
或ValueNode
。
ObjectNode
是JsonNode
的子类,专门表示JSON对象。它允许您通过添加、删除或更改属性来修改底层JSON数据。可以使用JsonNodeFactory
类创建ObjectNode
,该类提供了创建不同类型JsonNode
对象的方法。
通常情况下,当您只需要读取JSON数据而不需要修改时,应使用JsonNode
。当您需要修改数据时,例如在程序中动态构建JSON对象时,可以使用ObjectNode
。