Json转换类型报错问题:java.lang.Integer cannot be cast to java.math.BigDecimal
Json转换类型报错问题:java.lang.Integer cannot be cast to java.math.BigDecimal
- 小坑规避指南
小坑规避指南
项目中遇到json格式转换成Map,已经定义了Map的key和value的类型,但是在遍历Map取值的时候出现了类型转换的报错问题(java.lang.Integer cannot be cast to java.math.BigDecimal)
1、原来的代码
BigDecimal monthTotal = new BigDecimal("0");
String yearMonth = "2025-01";
String str="{\"2025-01-02\":22520770,\"2025-01-03\":23733.9675}" ;
Map<String, BigDecimal> dayMap = JSONObject.parseObject(str, Map.class);
for (Map.Entry<String, BigDecimal> entry : dayMap.entrySet()) {
if(entry.getKey().startsWith(yearMonth)){
monthTotal = monthTotal.add(entry.getValue());
}
}
上面的代码在monthTotal = monthTotal.add(entry.getValue()); 执行这行会报错,后面调试发现,你定义的Map<String, BigDecimal> 转换出来的不一定就是这个类型的
其中有两种类型的数据,所以取出来就会类型转换错误了!
所以为了避免踩这种坑,建议写法:
Map<String, BigDecimal> dayMap = JSONObject.parseObject(str, new TypeReference<Map<String, BigDecimal>>(){});
把Map.class改成new TypeReference<Map<String, BigDecimal>>(){}就可以了,这样就会转换成指定的键值对数据类型。