You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:24:41