2017-09-16 6 views
0

jsonフィールドを正しく解析しません:"mileage":0.0"をコード内でintに解析しました。値が0.0になるまで正常に解析されました。しかし、jsonフィールドの値が0.0から他の値に変更されるとすぐに、私はJsonFormatExceptionを取得し始めました。私はGsonを使ってアプリケーションでjsonを解析しています。だから私の質問はなぜ値が0.0だったのに例外がスローされなかったのですか?Gsonがintとしてfloatを解析します

+1

おそらく0.0は整数として正確に表現できるからです。 –

+0

@GabeSechanどういう意味ですか? – Harry

+1

0.0 = 0は整数です。ここで、0.1は整数ではありません。 –

答えて

2

Gsonがどのように動作するかは、デシリアライズの仕方によって異なります。 @SerializedName注釈によって駆動される可能性が高いので、自動的にデシリアライズを実行するようにしています。それでは、あなたはそれでこのようなもので、いくつかのクラスがあると仮定してみましょう:

@SerializedName("val") 
private int myValue; 

Gsonはあなたのオブジェクトのインスタンスにテキストをデシリアライズするとき、それはあなたが望むものをあなたに与えるために、「最善を尽くし」します。これには、あるタイプから別のタイプへのいくつかの値の強制変換が含まれます。上のように設定されたクラスの場合、Gsonは00.0を首尾よく強制するだけでなく、"1.0"(文字列)を1に変換することに成功します。

強制が「不可能」のときは、Exceptionしか得られません。 0.1または"1.5"を持ってすぐに、Gsonはその値をintとして表すことができないと知っているので、例外がスローされます。

これは両方向で機能することに注意してください。あなたのjsonに整数(たとえば{"val":3})が含まれていて、クラスがprivate String myValueと宣言している場合、Gsonは数字を"3"に強制的に変換します。

関連する問題