相关代码:
com.fasterxml.jackson.core jackson-databind 2.12.2
public static void main(String[] args) throws JsonProcessingException {
Test test1 = new ObjectMapper().readValue("{"content":"1","map":{"test":{},"test1":{}}}", Test.class);
Map map = test1.getMap();
Test test = (Test) map.get("test");
}
运行报错:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx问题原因
调试源码:
@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
{
switch (p.currentTokenId()) {
case JsonTokenId.ID_START_OBJECT:
{
JsonToken t = p.nextToken();
if (t == JsonToken.END_OBJECT) {
return new LinkedHashMap(2);
}
}
...
Map中对象返回为LinkedHashMap,故转换报错
解决调试源码小技巧:若不知道接口方法的实现类,可在接口的方法上打断点
将LinkedHashMap转成字符串,在解析成对象解决
JSON.parseObject(JSON.toJSONString(map.get("message")), Test.class);
public static void main(String[] args) throws JsonProcessingException {
Test test1 = new ObjectMapper().readValue("{"content":"1","map":{"test":{},"test1":{}}}", Test.class);
Map map = test1.getMap();
Test test = JSON.parseObject(JSON.toJSONString(map.get("message")), Test.class);
}
JSON包依赖
扩展com.alibaba fastjson 1.2.80
常用JSON解析依赖
GSONjacksonfastjson
JSON官网:
https://www.json.org/json-en.html
桃之夭夭,灼灼其华



