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

JSON整数类型自动转为Double类型问题咨询

嘿,这个问题我在集成HMS推送的时候也踩过坑,咱们来聊聊原因和解决办法:

问题原因分析

首先看你发送的请求结构——你把data字段的值设成了一个字符串形式的JSON("{'int_type':0}"),而不是直接传入原生的JSON对象。这里有两个关键转换点会导致类型变化:

  1. HMS推送服务器在处理这个字符串时,内部会做序列化/反序列化操作。由于JSON标准本身的数字类型没有区分整数和浮点数,服务器端的解析库可能会统一将数字处理为浮点数类型再下发。
  2. 客户端接收后,解析这个字符串为JSON对象时,很多默认的JSON解析库(比如Android里的Gson、Fastjson)为了兼容所有数字场景,会把没有小数部分的数字也解析成Double类型,毕竟JSON里数字是统一的数值类型,没有int/double的明确划分。
解决方案

给你几个可行的解决方向,按优先级排序:

  • 修正发送端的data格式(最推荐)
    不要把JSON字符串作为data的值,直接传入原生JSON对象。调整后的发送数据应该是这样:
    {"validate_only": false, "message": {"data": {"int_type": 0}, ...}}
    
    这样HMS服务器会直接识别int_type的整数类型,客户端解析时只要对应类型匹配,就能拿到正确的int值。
  • 客户端解析时强制指定字段类型
    如果没办法修改发送端的格式,那在客户端解析data对应的字符串时,明确指定字段的类型:
    • 用Gson的话,在实体类里直接声明字段为int:
      public class DataModel {
          @SerializedName("int_type")
          private int intType;
          // getter/setter
      }
      
      Gson会自动把对应的数字(哪怕是Double类型的0.0)转成int值,前提是数字没有小数部分。
    • 用JSONObject解析的话,不要用get("int_type")(会返回Double),而是调用getInt("int_type"),它会自动把合法的数字转成int:
      JSONObject dataJson = new JSONObject(dataStr);
      int intType = dataJson.getInt("int_type");
      
  • 自定义JSON解析库的类型适配
    如果你用的解析库默认行为就是把数字转成Double,可以自定义类型适配器来强制解析无小数的数字为Integer。比如Gson的做法:
    Gson gson = new GsonBuilder()
        .registerTypeAdapter(Integer.class, new TypeAdapter<Integer>() {
            @Override
            public void write(JsonWriter out, Integer value) throws IOException {
                out.value(value);
            }
    
            @Override
            public Integer read(JsonReader in) throws IOException {
                JsonToken token = in.peek();
                if (token == JsonToken.NUMBER) {
                    String numStr = in.nextString();
                    return Integer.parseInt(numStr);
                }
                throw new JsonSyntaxException("Expected integer but was " + token);
            }
        })
        .create();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:39:06