Рубрики
Без рубрики

Как преобразовать объект JSON в объект Java с помощью Jackson

В этом уроке мы рассмотрим, как преобразовать объект JSON в пользовательский объект Java с помощью Jackson, чрезвычайно популярной библиотеки привязки данных.

Автор оригинала: David Landup.

В этом уроке мы рассмотрим как преобразовать объект JSON в объект Java с помощью Jackson , чрезвычайно популярной библиотеки привязки данных для Java.

В частности, мы будем работать с этим объектом JSON:

{
   "name":"David",
   "position":"Software Engineer",
   "skilltree":[
      "Java",
      "Python",
      "JavaScript"
   ],
   "address":{
      "street":"Street",
      "streetNo":"123"
   }
}

Поскольку мы работаем с внешней библиотекой, давайте добавим зависимость. Если вы используете Maven, вы можете добавить его с помощью:


    com.fasterxml.jackson.core
    jackson-databind
    2.11.3

Или, если вы используете Gradle, вы можете добавить:

implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.3'

Создание пользовательского класса

После этого мы можем создать простой пользовательский класс для размещения нашей Информации о сотрудниках из содержимого JSON:

public class Employee {

    private String name;
    private POSITION position;
    private List skilltree;
    private Address address;

    // Constructors, Getters, Setters, toString()
}

Примечание: Если мы хотим, чтобы Джексон мог автоматически связывать свойства нашего класса и свойства в объекте JSON, они должны иметь одинаковые имена. Мы рассмотрим, как изменить это поведение немного позже. Кроме того, вам понадобится пустой конструктор для создания экземпляра.

Здесь мы используем перечисление ПОЗИЦИЯ , которое выглядит следующим образом:

public enum POSITION {
    MANAGER, SOFTWARE_ENGINEER, CEO
}

И Адрес объект:

public class Address {
    private String street;
    private String streetNo;

    // Constructors, Getters and Setters, toString()
    
}

Преобразование объекта JSON в объект Java

Центральным классом Джексона является ObjectMapper . Это основной API для привязки данных, связанных с объектами, и вы будете использовать его все время с Джексоном.

Чтобы преобразовать объект JSON в объект Java, вы будете использовать метод readValue() экземпляра ObjectMapper , который десериализует его в предоставленную ссылку на класс:

String json = "{ \"name\":\"David\", \"position\":\"SOFTWARE_ENGINEER\", \"skilltree\":[ \"Java\", \"Python\", \"JavaScript\" ], \"address\":{ \"street\":\"Street\", \"streetNo\":\"123\" } }";

// ObjectMapper instantiation
ObjectMapper objectMapper = new ObjectMapper();

// Deserialization into the `Employee` class
Employee employee = objectMapper.readValue(json, Employee.class);

// Print information
System.out.println(employee);

Выполнение этого кода приведет к:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Employee{name='David', position=SOFTWARE_ENGINEER, skillTree=[Java, Python, JavaScript], address=Address{street='Street', streetNo='123'}}

Другой способ создать, чтобы Джексон знал, в какой класс он должен десериализоваться, – это использовать Ссылка на тип :

Employee employee = objectMapper.readValue(json, new TypeReference(){});

Печать этого экземпляра сотрудника также приведет к:

Employee{name='David', position=SOFTWARE_ENGINEER, skillTree=[Java, Python, JavaScript], address=Address{street='Street', streetNo='123'}}

Оба они создают данный объект и вызывают один и тот же процесс десериализации. Таким образом, единственная разница между этими двумя вызовами заключается в том, делаете ли вы статическую или динамическую ссылку на тип.