2017-09-16 129 views
0

我錯誤地將json字段解析爲:"mileage":0.0"在我的代碼中變成了int。它被成功解析,直到值爲0.0。但只要json字段的值從0.0更改爲任何其他值,我就開始獲得JsonFormatException。我正在使用Gson在我的應用程序中解析json。所以我的問題是,爲什麼在值爲0.0時沒有拋出異常,因爲它仍然是浮動的?Gson解析float爲int

+1

可能因爲0.0可以完全表示爲整數。 –

+0

@GabeSechan你是什麼意思? – Harry

+1

0.0 = 0 0是一個整數。其中0.1不是一個整數。 –

回答

2

Gson的工作方式取決於你如何進行反序列化。我敢打賭,你讓它自動進行反序列化,可能是由@SerializedName註釋驅動的。因此,讓我們假設你有一些類,在它是這樣的:

@SerializedName("val") 
private int myValue; 

當GSON反序列化文本到您的對象的實例,它會「盡力」給你想要的東西。這包括強制從一種類型到另一種類型的某些值。對於上面建立的類,Gson不僅會成功強制0.00,它還會成功強制"1.0"(字符串)到1

當強制是「不可能的」時,您將只能得到Exception;只要您有0.1"1.5",Gson知道它不能將該值表示爲int,因此它會引發異常。

請注意,這可以在兩個方向上工作。如果您的json包含整數(例如{"val":3}),但您的課程聲明private String myValue,則Gson將成功強制編號爲"3"