首页 > 解决方案 > Jackson - 如何反序列化包含额外包装器的子对象列表

问题描述

问题:由于额外的包装器,我正在努力将子对象(项目)映射到 Product.java 类。

杰森:

{
"id": "1",
"desc": "Shopping",
"items": [
  {
    "product": {
      "id": 2,
      "name": "Sugar"
    }
  },
  {
    "product": {
      "id": 1,
      "name": "Flour"
    }
  }
]

}

域模型 - 订单(JSON 父级):

public class Order {

private int id;

private String desc;

private Set<Product> items; 

}

领域模型 - 产品(JSON 子)

public class Product {

private int id;

private String name;

}

我如何使用 jackson 或任何其他 json 依赖项将此 json 字符串映射到这些域模型?

标签: javajson

解决方案


String data = "{" + 
                "\"id\": \"1\"," + 
                "\"desc\": \"Shopping\"," + 
                "\"items\": [" + 
                "  {" + 
                "    \"product\": {" + 
                "      \"id\": 2," + 
                "      \"name\": \"Sugar\"" + 
                "    }" + 
                "  }," + 
                "  {" + 
                "    \"product\": {" + 
                "      \"id\": 1," + 
                "      \"name\": \"Flour\"" + 
                "    }" + 
                "  }" + 
                "]" + 
                "}";
        
        Gson gson = new Gson();
        Order o = gson.fromJson(data, Order.class);
        System.out.println(o);

这条线的诀窍是

Order o = gson.fromJson(data, Order.class);

推荐阅读