java 在Jackson中,ObjectNode和JsonNode之间有什么区别?

rkue9o1l  于 12个月前  发布在  Java
关注(0)|答案(3)|浏览(164)

根据JsonNode的文档:
然而,大多数mutator需要通过特定的子类(如ObjectNode和ArrayNode)访问。
然而,我仍然感到困惑,因为一些stackoverflow的答案似乎可以互换使用它们。它们有什么不同的用途?

yv5phkfx

yv5phkfx1#

JsonNodeObjectNodeArrayNode扩展的基类。JsonNode表示任何有效的Json结构,而ObjectNodeArrayNode分别是对象(aka map)和数组的特定实现。
ArrayNode有特定的方法来处理数组,例如get(index i)。你不能在JsonNodeObjectNode中获得特定索引处的项目,但你可以在ArrayNode中获得。

qoefvg9y

qoefvg9y2#

为了解决OP关于Stack Overflow的问题,可以互换使用ObjectNodeJsonNode:您看到的混淆的一个可能来源是JsonNodeimplements most of the functionality of both ObjectNode and ArrayNode,默认情况下主要返回falsenull。子类型然后覆盖它们各自的方法以正确地工作(例如ArrayNode的索引,ObjectNode的命名访问)。Javadoc说:
作为一般设计规则,大多数访问器(“getter”)都包含在这个[JsonNode]基类中,以允许在不进行类型转换的情况下遍历结构。然而,大多数mutator需要通过特定的子类(如[ObjectNode]和[ArrayNode])访问。这看起来是明智的,因为在构建或修改树时通常可以获得正确的类型信息,但在阅读树(从解析的JSON内容新构建)时不太常见

  • "[T]o allow for transporting structure without type casts”* 是关键,也是你经常可以一直使用JsonNode的原因,因为只要你调用的方法与实际解析的对象数据的子类型匹配,它们就能按预期工作。
1tuwyuhd

1tuwyuhd3#

JsonNodeObjectNode都是Jackson库中用于处理Java中JSON数据的类。
JsonNode是一个抽象类,表示JSON树中的节点。它可用于读取和浏览JSON数据,但不允许修改底层数据。因为它是抽象的,所以不能直接创建JsonNode对象。相反,您可以使用它的一个具体子类,如ObjectNodeArrayNodeValueNode
ObjectNodeJsonNode的子类,专门表示JSON对象。它允许您通过添加、删除或更改属性来修改底层JSON数据。ObjectNode是用JsonNodeFactory类创建的,该类提供了创建不同类型的JsonNode对象的方法。
一般来说,当你只需要读取JSON数据,而不需要修改它时,你应该使用JsonNode。当需要修改数据时,例如以编程方式构建JSON对象时,可以使用ObjectNode

相关问题