Gson在JAVA Android中将boolean从1反序列化为false

时间:2016-09-12 17:54:56

标签: java android json gson

我正在使用的课程如下:

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类中的其他所有内容都完全反序列化

任何建议都将不胜感激。

2 个答案:

答案 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" ,...);

您可以拥有此常用键的枚举。