如何使用Jackson来反序列化对象数组? 推荐| Java Debug 笔记

795 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

**如何使用Jackson来反序列化对象数组? **

在杰克逊的数据绑定的文档表明,杰克逊支持deserialising“所有支持类型的数组”,但我不能找出确切的语法这一点。

对于单个对象,我可以这样做:

//json input
{
    "id" : "junk",
    "stuff" : "things"
}

//Java
MyClass instance = objectMapper.readValue(json, MyClass.class);

现在,对于数组,我想这样做:

//json input
[{    "id" : "junk",    "stuff" : "things"},{    "id" : "spam",    "stuff" : "eggs"}]

//Java
List<MyClass> entries = ?

有人知道是否有不可思议的命令吗?如果没有,那么解决方案是什么?

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

首先创建一个映射器:

import com.fasterxml.jackson.databind.ObjectMapper;// in play 2.3
ObjectMapper mapper = new ObjectMapper();

作为数组:

MyClass[] myObjects = mapper.readValue(json, MyClass[].class);

作为列表:

List<MyClass> myObjects = mapper.readValue(jsonInput, new TypeReference<List<MyClass>>(){});

指定列表类型的另一种方法:

List<MyClass> myObjects = mapper.readValue(jsonInput, mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class));

高分回答:

从尤金·茨霍夫列波夫(Eugene Tskhovrebov)

List<MyClass> myObjects = Arrays.asList(mapper.readValue(json, MyClass[].class))

这个解决方案似乎对我来说是最好的。

文章翻译自 am2dgbqfb6mk75jcyanzabc67y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/6…

作者建议: 用过jackson,看了一下doc:Arrays.asList(mapper.readValue(json, MyClass[].class))

如果想进行一个扩展:juejin.cn/post/696217…

Gson和jackson和fastjson作者都有用过,Gson能支持三层嵌套、jackson社区活跃,fastjson国内很火,但是也有不足,我看阿里云是没有用fastjson来解析json的

之所以我知道阿里云是没有用fastjson来解析json是因为,我对接了钉钉的api文档,在源代码中并未出现fastjson的身影,如果你感兴趣,可私信我要源码!

图片.png

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️