【问题标题】:GSON treats integer as doubleGSON 将整数视为双精度
【发布时间】:2017-09-19 20:37:55
【问题描述】:

我需要在 String 属性中读取整数和双精度,但 GSON 将每个 int 视为双精度(是的,我知道它是 JSON 标准)。

所以例如我有课:

public class MyObject {
    String value;
}

在某些情况下,我有这个 JSON - {"value": 1},有时 - {"value": 2.4}

我必须按原样显示这些值,但第一个值将被读取为1.0

我尝试使用JsonDeserializerTypeAdapter,两者都有类似getAsString 的方法,并且它们都首先将值转换为双精度然后返回。

方法在JsonPrimitive 中的样子:

@Override
public String getAsString() {
    if (isNumber()) {
        return getAsNumber().toString();
    } else if (isBoolean()) {
        return getAsBooleanWrapper().toString();
    } else {
        return (String) value;
    }
}

您可以在此处查看isNumber

那么是否有可能以某种方式解决这个问题?

【问题讨论】:

    标签: java android json gson


    【解决方案1】:
    public class youClass(){
      private int i;
    }
    

    然后:

    Gson gson = new Gson();
    yourClass = gson.fromJson(jsonText , yourClass);
    yourClass.getI();
    

    希望有用

    【讨论】:

      【解决方案2】:

      你可以做的是你可以从你的 JSON

      中获取 String 的值

      并创建 check 以知道该值是 double 还是只是一个 integer ,使用以下一种棘手的方法。

      试试下面的代码:

         String stringArr[] = {"1", "1.0",  "1.2", "3.5", "2.5"};
              for(int i=0;i<stringArr.length;i++){
                    if(stringArr[i].equals(String.valueOf(Double.parseDouble(stringArr[i])))){
                          System.out.println("It's a double value : "+stringArr[i]);
                    }else{
                          System.out.println("It's a inte value : "+stringArr[i]);
                    }
              }
      

      输出:

      这是一个整数值:1

      这是一个双精度值:1.0

      这是一个双精度值:1.2

      这是一个双精度值:3.5

      这是一个双精度值:2.5

      【讨论】:

      • 如果它来自服务器端,我需要显示尾随零。如果它没有零,我需要显示没有零。这就是为什么我说我想保留来自服务器的值。
      • @Google 我误解了这个问题,我刚刚更新了一个
      • 但是这里的问题是我在使用 Gson 时不能得到“1”,而不是“1.0”。 Gson 自动将“1”转换为“1.0”
      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 2017-10-26
      • 2016-01-01
      • 2013-05-13
      相关资源
      最近更新 更多