如何处理名称相同但类型不同的字段?我在同一请求中从API获取时有时会得到整数值,有时会得到布尔值。当我得到像这样的Json时,我想知道如何处理。我创建了类型适配器,但它不起作用。我考虑创建不同的POJO类,但这个问题不仅适用于一个请求。出于这个原因,我不想创建POJO。顺便说一下,我看到过类似的问题,但它并没有解决我的问题。
有时我会遇到int类型的问题。
{
"name" : "john doe",
"isValid" : true
}
有时我会遇到int类型的问题。
{
"name" : "john doe",
"isValid" : 1
}
我在获取整数时遇到了意外的JSON异常
class XModel{
private boolean isValid;
...
...
}
我希望对于每个请求返回一个布尔值。有人知道如何解决这个问题吗?
编辑: 我想通过类型适配器防止使用instanceOf关键字。
解决方案:@Michał Ziober的回答对我有效。
class BooleanJsonDeserializer implements JsonDeserializer<Boolean> {
private final Set<String> TRUE_STRINGS = new HashSet<>(Arrays.asList("true", "1", "yes"));
@Override
public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
System.out.println(json);
JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive();
if (jsonPrimitive.isBoolean()) {
return jsonPrimitive.getAsBoolean();
} else if (jsonPrimitive.isNumber()) {
return jsonPrimitive.getAsNumber().intValue() == 1;
} else if (jsonPrimitive.isString()) {
return TRUE_STRINGS.contains(jsonPrimitive.getAsString().toLowerCase());
}
return false;
}
}