如何解决JSON解析无小数点数值为Double时的类型转换异常
解决JSON数组中整数/浮点数兼容解析的ClassCastException问题
这个问题我之前处理异构JSON数值时也踩过一模一样的坑!JSON解析器会根据数值是否带小数点自动把它们映射成Integer或Double类型,直接强转Double自然会抛出ClassCastException,这里给你几个靠谱的解决方案:
方案1:通过Number类中转(通用兼容)
因为Integer和Double都是Number的子类,我们可以先把值转成Number,再调用它的doubleValue()方法,这样不管底层是整数还是浮点数都能安全转成double:
Number num = (Number) jsonArray.get(7); double x = num.doubleValue();
比如你例子中的3810(Integer类型),调用doubleValue()后会自动转为3810.0,完全符合需求。
方案2:直接使用JSONArray的getDouble方法(org.json库专属)
如果你用的是标准的org.json库,其实它已经提供了内置的兼容方法——getDouble(int index),这个方法内部会自动处理Integer转Double的逻辑,不用我们手动判断:
double x = jsonArray.getDouble(7);
看源码的话,这个方法会先获取对应位置的对象,若为Number则直接转double,甚至还能处理字符串形式的数值,实用性拉满。
额外说明(其他JSON库适配)
如果后续换用其他JSON解析库,也有对应的解决方式:
- Gson:直接将目标类型指定为
Double,Gson会自动把JSON中的整数解析为Double类型 - Jackson:配置
DeserializationFeature.ACCEPT_INTEGER_AS_DOUBLE,开启后Jackson会允许将整数数值反序列化为Double字段
内容的提问来源于stack exchange,提问作者elp
相关产品推荐
相关产品推荐

