JackSon的ObjectNode和JsonNode

JackSon的ObjectNode和JsonNode

想要代替FastJson的JsonObect,需要用到ObjectNode和JsonNode

最核心的就是:

  • JsonNode是一个抽象类,不能实例化,它不能put新节点进去(节点就是jsonobject存储的一对kv)
  • ObjectNode是JsonNode的子类,可以进行put
关系:

JsonNode类是一个抽象类,它表示JSON格式数据的节点。JsonNode对象可以是一个JSON对象、数组、字符串、数字等等。JsonNode类中包含了许多操作JSON节点的方法,例如get()、path()、isValueNode()等等。

ObjectNode类是JsonNode的子类,它表示一个JSON对象节点。与JsonNode不同的是,ObjectNode对象只能包含JSON对象类型的子节点,而不能包含数组、字符串、数字等等。ObjectNode类中包含了JsonNode类中的所有方法,同时也添加了一些操作JSON对象的方法,例如put()、remove()等等。

为什么JsonNode没有put方法

JsonNode类是一个抽象类,它的实现类包括ObjectNode、ArrayNode、TextNode、NumericNode等。这些实现类都是不可变的,也就是说它们的值一旦被设置,就不能被修改。因此,JsonNode类没有提供类似put()方法这样的修改操作。

相比之下,ObjectNode类是JsonNode的一个实现类,它提供了一系列的put()方法来添加或修改子节点。ObjectNode是可变的,即可以修改已有的子节点,也可以添加新的子节点

JsonNode类之所以设计成不可变的,是为了保证JSON数据的稳定性和安全性。在多线程环境下,如果允许修改JsonNode对象的值,那么可能会引发线程安全问题。而将JsonNode对象设计成不可变的,则可以避免这些问题。

**虽然JsonNode对象本身是不可变的,但是可以通过ObjectMapper类来创建新的JsonNode对象。**例如,可以通过ObjectMapper的createObjectNode()方法创建一个新的ObjectNode对象,并使用put()方法添加新的子节点。需要注意的是,每次添加新的子节点时,都会创建一个新的JsonNode对象,因此在处理大量数据时需要注意效率问题。

ObjectNode和JsonNode两个区别,应该在什么情况下使用

JsonNode是不可变的,一旦创建后就不能修改其值或添加子节点;而ObjectNode是可变的,可以添加、修改、删除子节点。因此,如果需要对JSON数据进行修改操作,应该使用ObjectNode类;如果只需要读取JSON数据,可以使用JsonNode类

需要注意的是,由于ObjectNode是可变的,因此在多线程环境下需要进行同步操作,否则可能会引发线程安全问题。另外,ObjectNode类提供了许多便捷的方法来操作JSON对象,如put()、set()、replace()等,可以极大地简化JSON数据的处理过程。但是,在处理大量数据时,需要注意ObjectNode对象的创建和销毁,以及内存使用的问题。

总之,JsonNode和ObjectNode都是Jackson库中处理JSON数据的重要类,应该根据实际需要选择使用。如果只需要读取JSON数据,可以使用JsonNode类;如果需要对JSON数据进行修改操作,应该使用ObjectNode类。同时,需要注意线程安全、内存使用等问题,以确保程序的正确性和性能。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值