【问题标题】:Google GSON: Deserialize JSON data to JavaGoogle GSON:将 JSON 数据反序列化为 Java
【发布时间】:2016-02-19 14:40:30
【问题描述】:

我们使用 Google GSON 将 JSON 数据反序列化为 Java 对象。请参阅下面的示例 JSON 数据和相应的 POJO 类。我能够反序列化“名称”和“电话号码”字段。但是对于 "deparments" 字段,我看到 Null。你能帮我如何反序列化 "deparments" 字段吗?

我的 JSON:

{
  "name": "customer",
  "phoneNumber": "000000000",
  "deparments": "xyz,abc,wyz,djkf, iii"
}

班级:

public class CustomerInfo
{
    private String name;
    private String phoneNumber;
    private String deparments;

    // getters and setters
}

CustomerDeserializer.java:

...
Gson gson = new Gson();
CustomerInfo customerInfo = gson.fromJson(reader, CustomerInfo.class);

【问题讨论】:

  • 可能是 Gson 拼写检查器删除了该属性
  • 你能粘贴实际代码吗?这显然不是因为存在拼写错误(例如“Privaet”)和大小写不一致,因此无法诊断实际问题。
  • 您的代码适用于我,适用于 GSON:2.2.4

标签: java json gson


【解决方案1】:

重新检查您的 JSON 源。我认为您只有一些带有键的对象:departments,而不是 deparments

无论如何,下一个代码对我有用:

public class CustomerInfo
{
    private String name;
    private String phoneNumber;
    private String deparments;

    // getters and setters
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getPhoneNumber(){
        return phoneNumber;
    }
    public void setPhoneNumber(String phoneNumber){
        this.phoneNumber = phoneNumber;
    }
    public String getDeparments() {
        return deparments;
    }
    public void setDeparments(String deparments) {
        this.deparments = deparments;
    }

    @Override
    public String toString() {
        return "CustomerInfo{" +
                "name='" + name + '\'' +
                ", phoneNumber='" + phoneNumber + '\'' +
                ", deparments='" + deparments + '\'' +
                '}';
    }
}

@Test
public void desJson(){
    String json = "{\n" +
            "  \"name\": \"customer\",\n" +
            "  \"phoneNumber\": \"000000000\",\n" +
            "  \"deparments\": \"xyz,abc,wyz,djkf, iii\"\n" +
            "}";
    Gson gson = new Gson();
    CustomerInfo customerInfo = gson.fromJson(json, CustomerInfo.class);
    System.out.println(customerInfo);
}

输出是:

CustomerInfo{name='客户', phoneNumber='000000000', deparments='xyz,abc,wyz,djkf, iii'}

【讨论】:

    【解决方案2】:

    复制并粘贴以下代码

    public class CustomerInfo {
    
        @SerializedName("name")
        private String name;
        @SerializedName("phoneNumber")
        private String phoneNumber;
        @SerializedName("deparments")
        private String deparments;
    
        @Override
        public String toString() {
            return new Gson().toJson(this, CustomerInfo.class);
        }
    }
    

    然后像下面的代码那样反序列化它

    CustomerInfo customerInfo = new Gson().fromJson(jsonString, CustomerInfo.class);
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      相关资源
      最近更新 更多