在没有LinkedHashMap的情况下反序列化嵌套对象

时间:2020-04-14 13:33:19

标签: java json jackson

我的问题是我有一个带有嵌套对象的json字符串,杰克逊在反序列化它们时使用LinkedHashMap。您如何配置Jackson,以便在构造对象时更喜欢使用HashMap类型?

mapper.readValue("{\"a\":\"b\":\"nes\"}", Map.class)

enter image description here

1 个答案:

答案 0 :(得分:0)

AFAIK,没有配置。但是,您可以为Map.class编写自定义反序列化器。像这样的东西:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Map.class, new JsonDeserializer<Map<?,?>>() {
        @Override
        public Map<?,?> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
            return jsonParser.getCodec()
                    .readValue(jsonParser, HashMap.class);
        }
    });
mapper.registerModule(module);
final Map<?, ?> map = mapper.readValue("{\"a\": {\"b\":1}}", Map.class);
assertEquals(HashMap.class, map.get("a").getClass());

我认为它不会像您希望的那样起作用,但是,也许它将对您的研究有所帮助。

相关问题