2017-09-19 83 views
0

我需要在String屬性中讀取整數和雙精度值,但GSON將每個整數都視爲雙精度(是的,我知道它是JSON標準)。GSON將整數視爲雙精度

所以,比如我有類:

public class MyObject { 
    String value; 
} 

在某些情況下,我有了這個JSON - {"value": 1},有時 - {"value": 2.4}

而我必須顯示這些值,因爲它們是,但第一個值將被讀爲1.0

我試過使用JsonDeserializerTypeAdapter,都有類似getAsString的方法,它們都先將值轉換爲double然後返回它。

方法如何看起來JsonPrimitive

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

您可以在這裏看到isNumber檢查。

那麼可以通過某種方式解決這個問題嗎?

回答

0
public class youClass(){ 
    private int i; 
} 

然後:

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

希望是有用

0

你可以做的是,你可以從你的JSON獲得價值爲字符串

,創造檢查知道值是或只是一個整數,使用下面一個棘手的方式。

嘗試以下代碼:

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]); 
       } 
     } 

輸出:

這是一個INTE值:1

這是一個雙值:1.0

這是一個雙精度值: 1.2

這是一個雙精度值:3.5

這是一個雙精度值:2.5

+0

我需要顯示尾隨零,如果它來自服務器端。如果它沒有零,我需要顯示無零。這就是爲什麼我說我想離開服務器的價值。 – dewarder

+0

@谷歌我誤解了這個問題,我只是更新了一個 –

+0

但問題在這裏,我不能得到「1」,而不是「1.0」使用Gson時。 Gson自動將「1」轉換爲「1.0」 – dewarder

相關問題