相关疑难解决方法(0)

GSON为特定字段将整数值动态转换为布尔值

如何处理获取同名但类型不同的字段?我在同一个请求中从 API 有时得到整数值有时是布尔值。我想知道当我得到这样的 Json 时如何处理。我创建了类型适配器但它不起作用

我想过创建不同的 POJO 类。但是这个问题不仅仅针对一个请求。由于这个原因,我不喜欢创建 POJO。顺便说一句,我看到了类似的问题,但它并没有解决我的问题。

{
  "name" : "john doe",
  "isValid" : true 
}
Run Code Online (Sandbox Code Playgroud)

有时我得到 int

{
  "name" : "john doe",
  "isValid" : 1 
}
Run Code Online (Sandbox Code Playgroud)

获取整数时出现意外的 json 异常

class XModel{
    private boolean isValid;
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想为每个请求返回一个布尔值。有谁知道如何解决这个问题?

编辑:我想通过类型适配器阻止 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()) { …
Run Code Online (Sandbox Code Playgroud)

java serialization android json gson

5
推荐指数
1
解决办法
1338
查看次数

标签 统计

android ×1

gson ×1

java ×1

json ×1

serialization ×1