如何使用Gson将True标记为true,将False标记为false?

时间:2014-12-30 10:16:09

标签: java json gson

我正在尝试从服务器解析JSON。我有Pojo模型,但服务器JSON发送boolean为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 user = new Gson()。fromJSON(json,User.class);

3 个答案:

答案 0 :(得分: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]

重新创建模型状态(Desererialization)是通过反射完成的,并且区分大小写的布尔字符串。 你可以通过

检查一下
System.out.println(Boolean.parseBoolean("true"));
System.out.println(Boolean.parseBoolean("True"));

答案 1 :(得分:0)

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

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

要按给定方式解压缩响应,请定义另一个类:

public class JsonResponse {
    private User user;
}

...并解压缩:

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

...这应该会为您提供正确填充用户的回复。

答案 2 :(得分:-1)

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