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

使用Gson解析器未定义Double变量却报Invalid Double异常

解决Gson解析空字符串触发Invalid Double异常的问题

这种情况我之前踩过坑!虽然你的类里没定义Double类型,但大概率是JSON里某个**数值类型字段(比如int、float、long)**返回了空字符串""——Gson底层解析逻辑里,会尝试把这类异常值转成Double处理,结果就抛出了这个看似矛盾的异常。

给你几个实用的解决方向:

  • 自定义通用TypeAdapter处理空字符串
    写一个适配所有数值类型的TypeAdapter,遇到空字符串就返回默认值或null,从根源上拦截解析错误。示例代码如下:

    public class NumberTypeAdapter extends TypeAdapter<Number> {
        @Override
        public void write(JsonWriter out, Number value) throws IOException {
            if (value == null) {
                out.nullValue();
                return;
            }
            out.value(value);
        }
    
        @Override
        public Number read(JsonReader in) throws IOException {
            if (in.peek() == JsonToken.NULL) {
                in.nextNull();
                return null;
            }
            String stringValue = in.nextString();
            if (stringValue.isEmpty()) {
                // 这里可以返回0、null或者你需要的默认值
                return 0;
            }
            try {
                return Double.parseDouble(stringValue);
            } catch (NumberFormatException e) {
                // 额外处理格式错误的情况
                return null;
            }
        }
    }
    

    然后创建Gson实例时注册这个适配器:

    Gson gson = new GsonBuilder()
            .registerTypeAdapter(Integer.class, new NumberTypeAdapter())
            .registerTypeAdapter(Float.class, new NumberTypeAdapter())
            .registerTypeAdapter(Long.class, new NumberTypeAdapter())
            .create();
    
  • 临时开启宽松解析模式
    如果只是想快速验证问题,可以开启Gson的宽松解析,它会忽略部分格式异常:

    Gson gson = new GsonBuilder()
            .setLenient()
            .create();
    

    不过这个方法不推荐长期使用,容易掩盖其他潜在的JSON格式问题。

  • 精准定位出错字段
    先打印触发异常的完整JSON字符串,找到那个空字符串对应的字段,然后针对性处理:比如给该字段单独设置TypeAdapter,或者临时把字段类型改成String测试,确认问题后再调整回合适的数值类型并做兼容处理。

内容的提问来源于stack exchange,提问作者Siddhesh Pawar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:18:58