Конвертация JsonNode в POJO: быстрое решение в Java
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для преобразования JsonNode
в POJO, используя библиотеку Jackson, примените метод treeToValue
из класса ObjectMapper
:
ObjectMapper mapper = new ObjectMapper();
MyClass myPojo = mapper.treeToValue(jsonNode, MyClass.class);
Таким образом, ваш jsonNode
будет корректно преобразован в экземпляр класса MyClass
.
Навигация по старым версиям Jackson
Если вы используете версии Jackson ранее 2.4, подойдет метод readValue
:
ObjectMapper mapper = new ObjectMapper();
MyClass myPojo = mapper.readValue(someJsonNode.traverse(), MyClass.class);
Данное решение проверено временем и продолжает отлично функционировать!
Гибкость в настройке с пользовательской десериализацией
Для более подробной настройки создайте свои собственные десериализаторы
:
SimpleModule module = new SimpleModule();
module.addDeserializer(MyClass.class, new CustomDeserializer());
mapper.registerModule(module);
Настройте функционал под себя, как плейлист в Spotify:
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Так, непредвиденные свойства будут игнорироваться, как и те надоедливые песни, которые вы постоянно пропускаете.
Продвинутые стратегии преобразования: станьте мастером
Работаете с JsonNode
-массивами? Всегда проверяйте типы данных. Для работы с нестандартными типами, используйте TypeReference
:
if (jsonNode.isArray()) {
List<MyClass> myPojos = mapper.readValue(someJsonNode.toString(),
new TypeReference<List<MyClass>>(){});
}
Помните о соответствии моделей данных и вашего JSON.
Визуализация
Рассмотрим JsonNode
, как ваш гардероб:
public class Clothes {
private String shirt;
private String pants;
private String socks;
// Геттеры и сеттеры уже определены.
}
ObjectMapper mapper = new ObjectMapper();
Clothes unpackedClothes = mapper.treeToValue(jsonNode, Clothes.class);
Итак:
До: 🧳: { "shirt":"red", "pants":"blue", "socks":"white" }
После: [👕: красный, 👖: синий, 🧦: белый]
Каждый элемент JSON занимает свое место в POJO-структуре, так же как и каждая вещь в гардеробе.
Привязка данных: побеждаем в битве
Овладение привязкой данных требует освоения некоторых концепций.
Парсинг на уровне эксперта
Включите факел парсинга:
JsonParser parser = new JsonFactory().createParser(jsonString);
JsonNode node = parser.readValueAsTree();
Прежде чем производить преобразование, проверьте тип JsonNode
, чтобы избежать MismatchedInputException
.
Работа с ObjectReader для чтения данных
ObjectReader
подходит для внесения изменений во время чтения JsonNode
.
ObjectReader reader = mapper.readerFor(MyClass.class);
MyClass myPojo = reader.readValue(modifiedJsonNode);
ObjectReader
– это усовершенствованный инструмент, базирующийся на ObjectMapper
.
Работа с массивами и коллекциями
При обработке JSON-массивов, следуйте последовательной стратегии:
ArrayNode arrayNode = ... // Пусть arrayNode будет нашим массивом
List<MyClass> pojos = new ArrayList<>();
for (JsonNode node : arrayNode) {
pojos.add(mapper.treeToValue(node, MyClass.class));
}
Здесь всё как в старой поговорке: "Как съесть слона? По кусочку".
Обращайтесь к официальным источникам
Для точности, всегда обращайтесь к официальной документации Jackson.
Полезные материалы
- ObjectMapper (jackson-databind 2.7.0 API) – всё об
ObjectMapper
. - java – How to use Jackson to deserialise an array of objects – Stack Overflow – обсуждение десериализации в Jackson.
- Home · FasterXML/jackson-docs Wiki · GitHub – вики-страница библиотеки Jackson.
- Jackson Annotations – руководство по применению аннотаций в Jackson.
- Jackson Inheritance – описание механизма наследования в Jackson.