Jackson 用于多个POJO的Json Java数据绑定

Jackson 用于多个POJO的Json Java数据绑定,jackson,jackson-databind,Jackson,Jackson Databind,是否可以使用ObjectMapper解析包含多个对象的JSON?比如说 { "employee": { "name": "John", "surname": "Smith", "age": 30, "department": "sales" }, "department": { "name": "sales", "company": "abcd", "lead": "Mr Harrison" }, "company":

是否可以使用ObjectMapper解析包含多个对象的JSON?比如说

{
  "employee": {
    "name": "John",
    "surname": "Smith",
    "age": 30,
    "department": "sales"
  },
  "department": {
    "name": "sales",
    "company": "abcd",
    "lead": "Mr Harrison"
  },
  "company": {
    "name": "abcd",
    "location": "New York"
  }
}
我是否可以在一次映射程序运行中从该文件中获取对象员工、部门、公司,例如:


ObjectMapper mapper=新的ObjectMapper();
对象列表=mapper.readValue(…)


> p>创建一个父对象,该对象包含您要查找的3个对象,并将其读入该单个对象,然后使用该对象访问您的数据。 分别读取一个文件中的多个对象

,而无需创建专用的包装器POJO,也可以实现这一点,前提是您拥有JSON中每个根级别键应映射到哪个目标对象类型的信息

此信息可以在
地图中表示

Map<String, Class<?>> targetTypes = new HashMap<>();
targetTypes.put("employee", Employee.class);
targetTypes.put("department", Department.class);
targetTypes.put("company", Company.class);

好的,那将是一种解决办法。所以,正如我所建议的,不可能在一个文件中单独读取多个对象?我对jackson不是非常熟悉,但我想这会更困难。最简单的解决方案是创建一个包含这些项的父对象,然后为您的框架提供一个它更能理解的对象类型。杰克逊必须有一个清单,基本上,你要做的事情基本上是一样的。一旦绑定了对象,之后就可以将其拆分为单独的对象。为了澄清,您的文件中是否有固定对象?(对不起,这么晚了)
String json = ... // the JSON
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> parsed = mapper.readValue(json, Map.class);
List<Object> objects = parsed.entrySet().stream().map(
    (entry) -> {
      Class<?> targetClass = targetTypes.get(entry.getKey());
      return mapper.convertValue(entry.getValue(), targetClass);
    }
).collect(Collectors.toList());
[
 Employee(name=John, surname=Smith, age=30, department=sales), 
 Department(name=sales, company=abcd, lead=Mr Harrison), 
 Company(name=abcd, location=New York)
]