Я пытаюсь сделать Gson
для анализа значений без с плавающей точкой, как Longs, а не двойников, как это defaultly делает:Сделать Gson для анализа целых чисел, а не плавает
Gson gson = new GsonBuilder()
.registerTypeAdapter(Object.class, (JsonDeserializer<Object>) (json, type, context) -> {
// we don't want integer values to be parsed as floats
String value = json.getAsJsonPrimitive().getAsString();
if (value.matches("\\d+")) {
return Long.valueOf(value);
} else {
return context.deserialize(json, type);
}
}).create();
...
gson.fromJson(payload);
Я просто хочу, чтобы проверить, погода значение содержит .
, а если нет, проанализируйте его как Long
. В противном случае используйте метод разбора по умолчанию.
Однако, когда я помещаю там точки останова, метод никогда не вызывается. Полагаю, что я неправильно зарегистрировал адаптер.
EDIT1: Json может содержать списки со строками, целыми числами, удвоениями и картами. Мне нужно общее решение.
EDIT2: Я также пробовал варианты .registerTypeAdapter(Number.class
или .registerTypeAdapter(Double.class
без эффекта. Все еще не вызван.