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

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

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

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

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

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.3</version>
</dependency>

Если же Gradle, то так:

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

Создаём пользовательский класс

Сделав это, мы можем создать простой пользовательский класс, чтобы разместить информацию о наших сотрудниках (Employee) из содержимого JSON:

public class Employee {

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

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

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

Здесь мы используем перечисление, POSITION:

И объект Address:

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

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

Конвертируем объект JSON в объект Java

ObjectMapper – центральный класс Jackson. Это основной API для привязки данных, связанных с объектами. Вы будете использовать его всё время при работе с Jackson.

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

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


ObjectMapper objectMapper = new ObjectMapper();


Employee employee = objectMapper.readValue(json, Employee.class);


System.out.println(employee);

Результат:

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

Ещё можно использовать TypeReference:

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

Печать экземпляра employee приведёт к:

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

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

Ответить