Автор оригинала: 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 Listskilltree; 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'}}
Оба они создают данный объект и вызывают один и тот же процесс десериализации. Таким образом, единственная разница между этими двумя вызовами заключается в том, делаете ли вы статическую или динамическую ссылку на тип.