Я работаю с ответом JSON, который имеет неправильный формат. Все поля возвращаются как Строки
. К сожалению, я не могу контролировать возвращаемые данные .
Я использую Gson и пытаюсь проанализировать объект JSON, который включает в себя такое поле:
{
[...]
"cost": "9.25"
}
Очевидно, оно должно быть напечатано как Число
. Когда я пытаюсь разобрать это как String
, Number
или double
, я получаю NumberFormatException:
com.google.gson.JsonSyntaxException: java.lang.NumberFormatException:
[...]
at com.myapp.android.LauncherActivity$1.onSuccess(LauncherActivity.java:69)
[...]
Caused by: java.lang.NumberFormatException:
at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:267)
at java.lang.Double.parseDouble(Double.java:285)
at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:599)
at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:228)
... 19 more
LauncherActivity Line 69:
Item item = gson.fromJson(response, Item.class);
Итак, я последовал этот аналогичный вопрос и попытался создать TypeAdapter
следующим образом:
public class CostTypeAdapter implements JsonDeserializer, JsonSerializer {
public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
Double cost;
try {
cost = json.getAsDouble();
} catch (NumberFormatException e) {
cost = 0.00d;
}
return cost;
}
public JsonElement serialize(Double src, Type typeOfSrc,
JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
И зарегистрировал его при создании GsonBuilder
:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Cost.class, new CostTypeAdapter());
Gson gson = builder.create();
И мои Стоимость
class:
public class Cost {
private Double value;
public Cost(Double value) {
this.value = value;
}
public Double getValue() {
return value;
}
}
Но я получаю то же самое NumberFormatException
.
Есть идеи, что здесь происходит? Разве это исключение не должно быть обнаружено в моем CostTypeAdapter.deserialize ()
, по крайней мере?
Любая помощь / руководство приветствуются.