使用具有内部集合映射的Jackson Object Mapper解析JSON响应

时间:2014-10-13 14:11:07

标签: java rest jackson

我有一个json响应如下

{
  "event_date": "2014-10-10T19:18:04+05:30",
  "company": "b2c",
  "entity_id": 7,
  "attributes": {
    "id": 7,
    "order_id": 43,
    "status": "dispatched",
    **"quantities": [
      [{"idno1":2},{"idno2":4}]
    ]**
  }
}

这里我没有任何线索可以将其转换为java对象,因为它具有的键值对的数量会有所不同,即 key是第一个元素的idno1,值是2,另一个键是idno2,值是4,所以这里的两个键值都是变化的,这里面是一个数组里面的数量,这也是我的json里面。

请指导我如何使用带有ObjectMapper的jackson API在java REST API中实现这一点。

非常感谢您的支持!!!!

1 个答案:

答案 0 :(得分:0)

你确定你的quatities对象有两个方括号"quantities":[[{"idno1":2},{"idno2":4}]]吗?然后这意味着它的数组或数组。然后你可以创建像

这样的obejct
class Attribute{
    int id;
    @JsonProperty("order_id")
    int orderId;
    String status;
    List<List<Map<String, Integer>>> quantities;
    //Getters & Setters 
}

class Event {
    @JsonProperty("event_date")
    Date eventDate;
    String company;
    @JsonProperty("entity_id")
    int entityId;
    Attribute attributes;
    //Getters & Setters 
}

现在为你的json,你可以直接解析像

String json = "{\"event_date\":\"2014-10-10T19:18:04+05:30\",\"company\":\"b2c\",\"entity_id\":7,\"attributes\":{\"id\":7,\"order_id\":43,\"status\":\"dispatched\",\"quantities\":[[{\"idno1\":2},{\"idno2\":4}]]}}";
ObjectMapper mapper = new ObjectMapper();
Event eventObj = mapper.readValue(json, Event.class);
System.out.println(eventObj);

如果您不想要额外的括号,可以将数量对象更改为List<Map<String, Integer>> quantities,或者甚至缩小为Map<String, Integer> quantities