赞
踩
相关代码
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.2</version>
</dependency>
public static void main(String[] args) throws JsonProcessingException {
Test test1 = new ObjectMapper().readValue("{\"content\":\"1\",\"map\":{\"test\":{},\"test1\":{}}}", Test.class);
Map<String, Object> map = test1.getMap();
Test test = (Test) map.get("test");
}
运行报错
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx
LinkedHashMap不能转为对象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<String,Object>(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<String, Object> map = test1.getMap();
Test test = JSON.parseObject(JSON.toJSONString(map.get("message")), Test.class);
}
JSON包依赖
<!-- JSON 解析器和生成器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
</dependency>
常用JSON解析依赖:
GSON\jackson\fastjson\Json-lib
Json-lib:apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串。也可以把JavaBean转换成JSON字符串。
GSON:由Google提供的开源库。
FastJSON:由Alibaba提供的开源库。
Jackson: Spring MVC 的默认 json 解析器便是 Jackson。
JSON官网:
https://www.json.org/json-en.html
桃之夭夭,灼灼其华。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。