Джексон - читать разные объекты один за другим из файла

У меня есть такой файл:

[{
    "messageType": "TYPE_1",
    "someData": "Data"
},
{
    "messageType": "TYPE_2",
    "dataVersion": 2
}]

Как видите, есть файл, содержащий различные типы объектов JSON. У меня также есть ObjectMapper, который может анализировать оба типа. Я должен прочитать объекты JSon один за другим (потому что этот файл может быть довольно большим) и получить правильный объект (Type1Obj или Type2Obj) для каждого из них.

Мой вопрос в том, как я мог бы добиться, чтобы Джексон читал объекты JSon один за другим из файла.


person Arnold Robert Turdean    schedule 05.06.2019    source источник
comment
Может быть, это может помочь? stackoverflow.com/questions/44122782/ с использованием JsonSubTypes   -  person Brother    schedule 05.06.2019
comment
Возможный дубликат Полиморфизм в аннотациях Джексона: использование @JsonTypeInfo   -  person matanper    schedule 05.06.2019
comment
Как я уже сказал, больше нет проблем с двумя разными типами. Вопрос в том, как я могу читать один за другим объекты JSon, используя Jackson. (Я также отредактировал вопрос, чтобы сделать его более понятным)   -  person Arnold Robert Turdean    schedule 05.06.2019


Ответы (1)


Вы можете прочитать массив как общий объект Jackson JSON, похожий на

ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonData);

затем пройдите все дочерние элементы массива, используя

rootNode#elements()

и проанализируйте каждый из JsonNode дочерних элементов в соответствующем типе, используя проверку messageType, аналогичную

if ("TYPE_1".equals(childNode.get("messageType")) {
    Type1Class type1 = objectMapper.treeToValue(childNode, Type1Class.class);
} else // ...
person Smutje    schedule 05.06.2019