【问题标题】:how to mark True as true, False as false using Gson?如何使用 Gson 将 True 标记为 true,将 False 标记为 false?
【发布时间】:2014-12-30 10:16:08
【问题描述】:

我正在尝试从服务器解析 JSON。我有 Pojo 模型,但服务器 JSON 将布尔值发送为 True、False 而不是 true、false。是否可以使用自定义 GSONbuilder 等进行映射。

这是我的课

public class User {

      private String id;
      private String name;
      private boolean isOnline;

}

这是我来自服务器的 JSON

{
  "user": {
    "id": 1,
    "name": "Abc",
    "isOnline": True
  }
}

用户 user = new Gson().fromJSON(json,User.class);

【问题讨论】:

标签: java json gson


【解决方案1】:

你做错了。如果你的 json 字符串是你给他们的方式,你需要用用户对象创建另一个模型类,并在序列化时给它类。或者像我在以下代码中所做的那样。 Truetrue 无所谓。

public class HelloWorld {

    public static void main(String args[]) {

        String json = "{'id': 1,'name': 'Abc','isOnline': True}";
        User user = new Gson().fromJson(json, User.class);
        System.out.println(user);
    }

}

class User {

    private String id;
    private String name;
    private boolean isOnline;

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", isOnline=" + isOnline
                + "]";
    }
}

输出是

User [id=1, name=Abc, isOnline=true]

通过反射完成重新创建模型状态(反序列化),并处理区分大小写的布尔字符串。 您可以通过

进行检查
System.out.println(Boolean.parseBoolean("true"));
System.out.println(Boolean.parseBoolean("True"));

【讨论】:

    【解决方案2】:

    假设您在这里使用的是 Google Gson,您的对象创建不正确;你需要你的 JSON 看起来像这样才能工作:

    {
       "id": 1,
       "name": "Abc",
       "isOnline": True
    }
    

    要解压给定的响应,定义另一个类,如下所示:

    public class JsonResponse {
        private User user;
    }
    

    ...然后解压:

    JsonResponse user = new Gson().fromJSON(json, JsonResponse.class);
    

    ... 这应该会给您一个包含正确填充用户的响应。

    【讨论】:

    • 嗯,尽管与接受的答案基本相同,但没有发表评论就标记了。那里有一些非常奇怪的人。
    【解决方案3】:

    您需要编写一个自定义反序列化器。以下是一些示例:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2020-12-15
      • 2020-04-25
      相关资源
      最近更新 更多