gpt4 book ai didi

java - Gson:处理可以返回不同原始类型的json对象字段?

转载 作者:搜寻专家 更新时间:2023-11-01 08:29:53 28 4
gpt4 key购买 nike

我的应用程序正在与之通信的 API 发送如下所示的响应:

{
id:12345,
active:1
}

问题是旧版本的 API 将响应字段作为 boolean 值而不是像这样的 int 发送

{
id:12345,
active:false,
}

对于 Gson,我如何在不知道将返回哪个版本的情况下处理这两个问题?

最佳答案

注册 CustomDeserializer对于 boolean 值,当在任何对象中遇到 boolean 值时,gson 将尝试使用您定义的规则进行反序列化。

@Data
class JsonTestClass {
Boolean active = new Boolean(true);
Integer id;
}

class BooleanJsonDeserializer implements JsonDeserializer<Boolean> {
@Override
public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive();
if (jsonPrimitive.isBoolean()) {
return jsonPrimitive.getAsBoolean();
} else {
return jsonPrimitive.getAsInt() == 0 ? false : true;
}
}
}

// TempJson
public static void main(String[] args) throws Exception {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Boolean.class, new BooleanJsonDeserializer()).create();

System.out.println(gson.fromJson("{id:12345,active:1}", JsonTestClass.class).getActive());
System.out.println(gson.fromJson("{id:12345,active:0}", JsonTestClass.class).getActive());
System.out.println(gson.fromJson("{id:12345,active:false}", JsonTestClass.class).getActive());
System.out.println(gson.fromJson("{id:12345,active:true}", JsonTestClass.class).getActive());
}

输出:

true
false
false
true

关于java - Gson:处理可以返回不同原始类型的json对象字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41756006/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com