2017-09-16 130 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"