Если мы рассмотрим случай
чтения множества объектов в одном файле отдельно
, без создания выделенной оболочки POJO, этого также можно достичь при условиичто у вас есть информация о том, какой тип целевого объекта должен быть сопоставлен каждому из ключей корневого уровня в JSON.
Эта информация может быть представлена в виде Map
:
Map<String, Class<?>> targetTypes = new HashMap<>();
targetTypes.put("employee", Employee.class);
targetTypes.put("department", Department.class);
targetTypes.put("company", Company.class);
Десериализация должна быть выполнена в два этапа.Первый - преобразовать исходный JSON в Map<String, Object>
:
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());
Список objects
теперь содержит
[
Employee(name=John, surname=Smith, age=30, department=sales),
Department(name=sales, company=abcd, lead=Mr Harrison),
Company(name=abcd, location=New York)
]