当前位置:   article > 正文

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx解决

java.lang.classcastexception: java.util.linkedhashmap cannot be cast to java

问题

相关代码

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.12.2</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
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");
}
  • 1
  • 2
  • 3
  • 4
  • 5

运行报错

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx
  • 1

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);
}
}
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Map中对象返回为LinkedHashMap,故转换报错。

调试源码小技巧:若不知道接口方法的实现类,可在接口的方法上打断点。

在这里插入图片描述

解决

将LinkedHashMap转成字符串,在解析成对象解决。

JSON.parseObject(JSON.toJSONString(map.get("message")), Test.class);
  • 1
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);
}
  • 1
  • 2
  • 3
  • 4
  • 5

JSON包依赖

<!-- JSON 解析器和生成器 -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.80</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

扩展

常用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

桃之夭夭,灼灼其华。
在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/305328
推荐阅读
相关标签
  

闽ICP备14008679号