我的问题是我有一个包含嵌套对象的 json 字符串,并且 Jackson 在反序列化它们时使用 LinkedHashMap
。如何配置 Jackson,使其在构造对象时更喜欢 HashMap
类型?
mapper.readValue("{\"a\":\"b\":\"nes\"}", Map.class)
最佳答案
据我所知,没有任何配置。但是,您可以为 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());
我不认为它会如你所愿,但是,也许它会对你的研究有所帮助。
关于java - 不使用 LinkedHashMap 反序列化嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61208990/