11

我需要帮助将杰克逊映射器的响应解析为 POJO。我有这个作为回应:

 "data": [{
        "item": {
            "downloaded": false,
            "moderated": false,
            "add": false
        }
    },
    {
        "item": {
            "downloaded": false,
            "moderated": false,
            "add": false }
// more

那么如何将这个与映射器绑定到 POJO?这是我正在尝试的课程,但它返回“项目”无法识别且不允许被忽略。

public ArrayList<Item> data =  new ArrayList<Item>();

其中 item 是一个带有构造函数的公共静态类 Item,上面的所有字段都带有 getter 和 setter。

我该怎么做呢。我似乎无法在任何地方找到如何以这种方式从数组中读取数据。

4

3 回答 3

12
JsonNode jsonNode = mapper.readValue(s, JsonNode.class); 
JsonNode userCards = jsonNode.path("data");
List<Item> list = mapper.readValue(userCards.toString(), new TypeReference<List<Item>>(){});
于 2011-10-16T13:53:47.823 回答
8

您的示例缺少几部分(尤其是 Item 的定义),以了解您的结构是否兼容;但一般来说 JSON 和 Object 结构需要匹配。所以,你至少需要这样的东西:

public class DataWrapper {
  public List<Item> data; // or if you prefer, setters+getters
}

如果是这样,您将绑定:

DataWrapper wrapper = mapper.readValue(json, DataWrapper.class);

并访问数据

List<Item> items = wrapper.data;
于 2011-02-18T06:16:52.457 回答
2

这是我的 maziar 代码变体。

List<Item> list = mapper.readValue( s, new TypeReference<List<Item>>(){} );

它只是消除了首先转换为 JsonNode 并直接转换为 List 的过程;仍然可以正常工作,输出项目列表。

于 2012-03-23T07:37:55.070 回答