Конвертация JsonNode в POJO: быстрое решение в Java

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования JsonNode в POJO, используя библиотеку Jackson, примените метод treeToValue из класса ObjectMapper:

Java
Скопировать код
ObjectMapper mapper = new ObjectMapper();
MyClass myPojo = mapper.treeToValue(jsonNode, MyClass.class);

Таким образом, ваш jsonNode будет корректно преобразован в экземпляр класса MyClass.

Кинга Идем в IT: пошаговый план для смены профессии

Навигация по старым версиям Jackson

Если вы используете версии Jackson ранее 2.4, подойдет метод readValue:

Java
Скопировать код
ObjectMapper mapper = new ObjectMapper();
MyClass myPojo = mapper.readValue(someJsonNode.traverse(), MyClass.class);

Данное решение проверено временем и продолжает отлично функционировать!

Гибкость в настройке с пользовательской десериализацией

Для более подробной настройки создайте свои собственные десериализаторы:

Java
Скопировать код
SimpleModule module = new SimpleModule();
module.addDeserializer(MyClass.class, new CustomDeserializer());
mapper.registerModule(module);

Настройте функционал под себя, как плейлист в Spotify:

Java
Скопировать код
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Так, непредвиденные свойства будут игнорироваться, как и те надоедливые песни, которые вы постоянно пропускаете.

Продвинутые стратегии преобразования: станьте мастером

Работаете с JsonNode-массивами? Всегда проверяйте типы данных. Для работы с нестандартными типами, используйте TypeReference:

Java
Скопировать код
if (jsonNode.isArray()) {
    List<MyClass> myPojos = mapper.readValue(someJsonNode.toString(),
                              new TypeReference<List<MyClass>>(){});
}

Помните о соответствии моделей данных и вашего JSON.

Визуализация

Рассмотрим JsonNode, как ваш гардероб:

Java
Скопировать код
public class Clothes {
    private String shirt;
    private String pants;
    private String socks;

    // Геттеры и сеттеры уже определены.
}

ObjectMapper mapper = new ObjectMapper();
Clothes unpackedClothes = mapper.treeToValue(jsonNode, Clothes.class);

Итак:

Markdown
Скопировать код
До: 🧳: { "shirt":"red", "pants":"blue", "socks":"white" }
После: [👕: красный, 👖: синий, 🧦: белый]

Каждый элемент JSON занимает свое место в POJO-структуре, так же как и каждая вещь в гардеробе.

Привязка данных: побеждаем в битве

Овладение привязкой данных требует освоения некоторых концепций.

Парсинг на уровне эксперта

Включите факел парсинга:

Java
Скопировать код
JsonParser parser = new JsonFactory().createParser(jsonString);
JsonNode node = parser.readValueAsTree();

Прежде чем производить преобразование, проверьте тип JsonNode, чтобы избежать MismatchedInputException.

Работа с ObjectReader для чтения данных

ObjectReader подходит для внесения изменений во время чтения JsonNode.

Java
Скопировать код
ObjectReader reader = mapper.readerFor(MyClass.class);
MyClass myPojo = reader.readValue(modifiedJsonNode);

ObjectReader – это усовершенствованный инструмент, базирующийся на ObjectMapper.

Работа с массивами и коллекциями

При обработке JSON-массивов, следуйте последовательной стратегии:

Java
Скопировать код
ArrayNode arrayNode = ... // Пусть arrayNode будет нашим массивом
List<MyClass> pojos = new ArrayList<>();

for (JsonNode node : arrayNode) {
    pojos.add(mapper.treeToValue(node, MyClass.class));
}

Здесь всё как в старой поговорке: "Как съесть слона? По кусочку".

Обращайтесь к официальным источникам

Для точности, всегда обращайтесь к официальной документации Jackson.

Полезные материалы

  1. ObjectMapper (jackson-databind 2.7.0 API) – всё об ObjectMapper.
  2. java – How to use Jackson to deserialise an array of objects – Stack Overflow – обсуждение десериализации в Jackson.
  3. Home · FasterXML/jackson-docs Wiki · GitHub – вики-страница библиотеки Jackson.
  4. Jackson Annotations – руководство по применению аннотаций в Jackson.
  5. Jackson Inheritance – описание механизма наследования в Jackson.