目 录CONTENT

文章目录

com.fasterxml.jackson

FatFish1
2025-07-02 / 0 评论 / 0 点赞 / 31 阅读 / 0 字 / 正在检测是否收录...

jackson的使用案例

jackson核心对象 —— objectMapper

objectMapper是将object和json进行互转的核心类

json转object —— readValue方法

readValue可以有两个参数,其中参数1是从哪读,可以是file、流、url等,参数2是解析成什么类型。readValue有各种重写类型,其中最常用为:

readValue(String, Class);

将String的json串解析为对应的Class;此处使用自己构建的Dto解析json也可以。

也可以通过核心抽象组装类型TypeReference<T>进行组装类的转化,例如:

readValue(String, new TypeReference<List<String>>() {});

此处需要注意,想从str中解析出list,必须序列化的时候也拿list来序列化,直接拿str来序列化是不可能解析成长度为1的list的

一般来说,把对象进行序列化和反序列化最合适。

object转json —— writeValue方法

如果object是JsonNode类型可以直接读,不一定要转。

return object instanceof JsonNode ? object.toString() : om.writeValueAsString(object);

否则可以使用writeValue方法转成想要的类型。

writeValue有多种入参的版本,还有writeValueAsString、writeValueAsBytes方法

jackson源码赏析

jackson使用过程中的一些知识点

反序列化复杂嵌套对象

假如有一个对象是List<ComplexObj>转化的jsonString

将其反序列化时可使用:JSON.parseObject(jsonString, new TypeReference<Result<AddressQueryResult>>() {})

如果ComplexObj里面还有List<T> subList,而T还可能是一个List<InnerComplexObj>这样里面的类型就拿不到,导致反序列化不了

这时,可在jsonString里面加@type属性,例如:

[{\"subList\": [{\"type1\":....}, {\"type2\":...}]}]可变成:

[{\"subList\": [{\"@type\": \"com.me.InnerComplexObj\",\"type1\":....}, {\"@type\": \"com.me.InnerComplexObj\",\"type2\":...}]}]

即在实际真实属性前面加额外的@type属性,让json解析出来

0

评论区