【问题标题】:Unable to deserialize JSON response into Java Objects无法将 JSON 响应反序列化为 Java 对象
【发布时间】:2018-10-23 08:24:49
【问题描述】:

我知道有很多关于这个主题的疑问,但没有什么能帮助我解决以下问题

    {
  "_embedded": {
    "customers": [
      {
        "id": 101,
        "name": "John",
        "city": "Ohio"
      },
      {
        "id": 102,
        "name": "Tom",
        "city": "London"
      }
    ]
  }
}

为此,我在 Java 对象下创建了:

@Data
public class Wrapper {
    @JsonProperty("_embedded")
    private Customers customer;
  }

@Data
public class Customers {
@JsonProperty("customer")
private List<Foo> obj;
}

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo{
    private int id;
    private String name;
    private String city;
    }

任何帮助将不胜感激。

【问题讨论】:

  • 首先在 JSON 中你有 "customers" 但在课堂上 @JsonProperty("customer")
  • 请提供大量异常日志。此外,您的命名不正确 - _embeddedcustomers 确实没有提供对象的信息(与例外无关,但为了我们的理解)。正如@Maciej 指出的那样,请注意属性名称。
  • 你也用jackson注释了yuestion,但似乎使用Gson...
  • @Maciej 这里是错字,但在我的实际程序中,我使用了 JSON 文件中的对象名称
  • @KarthikR :这里是错字,但我根据 Json 对象和我在描述中添加的错误堆栈命名了对象名称。

标签: java jackson deserialization jackson-databind


【解决方案1】:

您在原始问题中存在一些命名问题,但忽略这些问题,您可以根据 JSON 构建您的类,以方便您自己和 Gson

这样的事情会起作用:

public class JsonWrapper {
    public Embedded _embedded;
}


public class Embedded {
    public Customers customers;
}


public class Customers extends ArrayList<Foo>{ }


public class Foo{
    public int id;
    public String name;
    public String city;
}


String json = "{\"_embedded\":{\"customers\":[{\"id\":101,\"name\":\"John\",\"city\":\"Ohio\"},{\"id\":102,\"name\":\"Tom\",\"city\":\"London\"}]}}";
JsonWrapper wrapper = new Gson().fromJson(json, JsonWrapper.class);

【讨论】:

  • List&lt;Foo&gt; customers; 代替Customers customers; 怎么样
  • @HK0909 太好了!不要忘记接受答案;)
  • @MagnusW 我已经在我的脚本中实现了这段代码并且它现在可以工作了。非常感谢你解决了我几天来苦苦挣扎的问题。接受答案的方式是什么..?可能我知道这一点。
  • @HK0909 不客气!您可以通过单击答案左上角的复选标记来接受答案。
猜你喜欢
  • 2014-07-24
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2014-08-10
  • 1970-01-01
  • 2021-05-14
相关资源
最近更新 更多