gpt4 book ai didi

java - jackson :如何反序列化嵌套的自定义 map 和列表?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:25 26 4
gpt4 key购买 nike

我正在尝试将未类型化的 JSON 文件反序列化为 Map 接口(interface)的自定义实现。
此自定义 map 实现只能有 java 简单类型(DateStringIntegerLong)和嵌套类型(嵌套映射的自定义 Map 实现和嵌套数组或列表的自定义 List 实现)

我尝试了以下方法:

CustomMap map = mapper.readValue(myJsonFile, CustomMap.class);

除了嵌套映射,我得到了 HashMap 类型,对于嵌套数组,我得到了 ArrayList 类型。

我认为 Jackson 回退到 HashMap 用于未知类型和 ArrayList 用于数组。

是否可以递归地回退到 CustomMap 而不是 HashMap 用于未知子类型和 CustomList 用于数组?

提前致谢

最佳答案

您可以通过在您的映射器上创建和注册一个 SimpleModule 来实现这一点。这将允许在您的情况下更改 Map 的类型映射以及 List 等其他类型。例如

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("CustomCollections", Version.unknownVersion());
module.addAbstractTypeMapping(Map.class, CustomMap.class);
module.addAbstractTypeMapping(List.class, CustomList.class);
mapper.registerModule(module);

您可能必须像这样调用 readValue:

Map<String, Object> data = mapper.readValue(myJsonFile, new TypeReference<CustomMap<String, Object>>() {});

请注意,这适用于 Jackson 2.6.0 及更高版本,因为有一个 bug以前。

此外,Jackson 默认为 Map 使用 LinkedHashMap 而不是 HashMap,以维护 JSON 文档中数据的顺序。

关于java - jackson :如何反序列化嵌套的自定义 map 和列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41491714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com