有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java GSON不解析布尔值(始终为false)

我使用改型来获取JSON文档。问题是,所有的布尔人都是假的

答案如下:

{
   "gender":[0,1],
   "age":[20,30],
   "likesLeaveHome":false,
   "likesSport":false,
   "likesCulture":false,
   "likesTraveling":false
   ...
}

我把改造方法称为

onResponse(Call<SearchProfile> call, Response<SearchProfile> response)

响应应该解析到的SearchProfile类如下所示:

public class SearchProfile {

    public ArrayList<Integer> gender = new ArrayList<>(); // works fine
    public ArrayList<Integer> age    = new ArrayList<>(); // works fine

    ...

    public Boolean likesLeaveHome = true;    // always false

    @SerializedName("likesSport")
    public boolean likesSport     = true;    // always false

    @SerializedName("likesCulture")
    public Boolean likesCulture;             // always false

    @SerializedName("likesTraveling")
    public Boolean mLikesTraveling;          // always false

    public boolean isLikesTraveling() {
        return mLikesTraveling;
    }

    public void setLikesTraveling(boolean likesTraveling) {
        mLikesTraveling = likesTraveling;
    }

}

如您所见,这是一个简单的pojo类。像“性别”和“年龄”这样的列表效果很好。尽管如此,布尔人还是无法设定。(这尤其奇怪,因为通过改装发送此对象正好发送此文档,所以GSON肯定知道布尔值)

如截图所示,我还尝试了其他方法,比如将Boolean包装类作为type而不是Boolean。 我还使用了@SerializeName注释或getter和setts方法等。 不过,所有的布尔人都是假的。即使我将它们声明为默认值true(因此GSON似乎总是用false覆盖该值)

希望有人有个好主意


共 (1) 个答案

  1. # 1 楼答案

    在示例中解析的JSON的所有值都是false。解析时,GSON将使用反射覆盖类的字段值,这意味着从JSON解析的任何值都将是字段的值,而不管它在类中如何初始化

    下面是一个将导致字段设置为true的示例响应。同样,这取决于您正在解析的JSON

    {
       "gender":[0,1],
       "age":[20,30],
       "likesLeaveHome":true,
       "likesSport":true,
       "likesCulture":true,
       "likesTraveling":true
       ...
    }