我正在使用的课程如下:
public class TheJob {
private String jobDescription = null, jobAdditionalInfo = null, jobAddress = null;
@SerializedName("jobActive")
public boolean jobActive = true;
@SerializedName("offsiteAllowed")
public boolean offsiteAllowed;
}
我收到的JSON如下:
[{"jobId":"2","jobDescription":"Beta","jobAdditionalInfo":"Edited ","jobAddress":"103 Emus Avenue \nCenturion \n0157 \nSouth Africa \n","jobActive":"1","offsiteAllowed":"1"}]
我删除了其余的JSON数组项,因为它们完全相同。
我无法获取布尔字段jobActive和offsiteAllowed来正确解析,即使JSON值为1,它们也始终解析为false。
除了布尔值
之外,我的TheJob类中的其他所有内容都完全反序列化任何建议都将不胜感激。
答案 0 :(得分:2)
Gson非常注重类型。要将int值解析为boolean,您可能必须注册一个自定义的布尔反序列化类。或者,如果您控制api更改返回true而不是1.它期望'true'并将其他所有内容视为false。应该有一些注册自定义JsonDeserializer类的示例。这个适配器允许你做一些事情,比如反序列化为一个名为isFruit的布尔变量,并从API返回Apple,Orange,Carrot等。注册后,您可以实现自定义反序列化器来评估值,并根据需要将true和false反序列化为isFruit。
答案 1 :(得分:1)
实现这一目标的最简单方法(手动)是自己检查和更改数据。我通常在这样的Util类中创建静态方法:
parseTypedBoolean(JsonObject obj, String... keys);
这样可以很容易地解析保存为0和1的所有布尔值。
for (String key : keys) {
if (obj.getInt(key) == 1) {
obj.put(key, true);
} else obj.put(key, false);
}
每次获取数据后:
JSONObject curr = response.getJSONObject(i);
toBoolean(curr, "is_available", "is_new", "is_parsed", "is_registered" ,...);
您可以拥有此常用键的枚举。