【问题标题】:GSON not parsing booleans (always false)GSON 不解析布尔值(始终为假)
【发布时间】:2016-10-09 16:24:38
【问题描述】:

我正在使用 Retrofit 来获取 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 类。像“性别”和“年龄”这样的列表工作得很好。尽管如此,布尔值仍无法设置。 (这特别奇怪,因为通过 Retrofit 发送这个对象发送的正是这个文档,所以 GSON 肯定知道布尔值)。

如截图所示,我还尝试了其他方法,例如将 Boolean 包装类作为类型而不是布尔值。 我还使用了 @SerializeName 注释或 getter 和 setts 方法等。 仍然所有布尔值总是错误的。即使我将它们默认为 true(所以 GSON 似乎总是用 false 覆盖这个值)。

希望有人有一个好主意!

【问题讨论】:

  • 你用的是什么版本?我试过“2.6.2”,效果很好。 "com.google.code.gsongson2.6.2"
  • 嗯,我使用的是改造框架中的内部版本,但据我所知这是 2.6.2。
  • 我还在等待解决方案@TobiasReich
  • 好吧,我已经有一段时间没有解决这个问题了,但到目前为止它似乎现在可以工作了。我不确定他们是否更改了 API 中的某些内容。我现在正在使用改造 2.1.0。也许这就是解决方案。如果我有时间,我会给出答案。
  • 遇到同样的问题:/

标签: java json boolean gson retrofit


【解决方案1】:

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

这是一个示例响应,它将导致字段设置为 true。同样,这取决于您要解析的任何 JSON。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2018-01-20
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多