Преобразование массива JSON в массив или список Java с помощью Джексона

Введение В этой статье мы преобразуем массив JSON в массив Java и список Java с помощью Джексона. Поскольку мы используем Джексона, вам придется добавить его в свой проект. Если вы используете Maven, это так же просто, как добавить зависимость:<dependency><groupId> com.fasterxml.jackson.core</groupId><artifactId> Jackson-Databind</artifactId><version> 2.11.2</version></dependency> Или, если вы используете Gradle: compile group: &#39;com.fasterxml.jackson.core&#39;, name: &#39;jackson-databind&#39;, версия:

Вступление

В этой статье мы преобразуем массив JSON в массив Java и список Java с помощью Джексона .

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

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

Или, если вы используете Gradle:

 compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.2' 

Поскольку мы сопоставляем JSON с нашими собственными объектами, давайте продолжим и определим POJO:

 public class Language { 
 
 private String name; 
 private String description; 
 
 // Getters, setters and toString() method 

Чтение JSON из строки

Начнем с чтения JSON из строки. Строка содержит массив языков программирования с краткими описаниями:

 String json = "[{\"name\": \"Java\", \"description\": \"Java is a class-based, object-oriented programming language.\"},{\"name\": \"Python\", \"description\": \"Python is an interpreted, high-level and general-purpose programming language.\"}, {\"name\": \"JS\", \"description\": \"JS is a programming language that conforms to the ECMAScript specification.\"}]"; 

Используя ObjectMapper , легко читать значения и сопоставлять их с объектом или массивом объектов. Мы просто используем метод readValue() , передавая содержимое JSON и класс, которому мы хотим сопоставить. Поскольку мы сопоставляем массив Language , мы также укажем это в readValue() :

 // It's advised to use ObjectMapper as a singleton and reuse the instance 
 final ObjectMapper objectMapper = new ObjectMapper(); 
 Language[] langs = objectMapper.readValue(json, Language[].class); 

В качестве альтернативы вы можете извлечь значения непосредственно в список, используя TypeReference Джексона:

 List<Language> langList = objectMapper.readValue(json, new TypeReference<List<Language>>(){}); 

Без использования TypeReference<> , который рекомендуется, вы можете преобразовать массив в список любым другим подходом, имеющимся в вашем распоряжении, например:

 List<Language> langList = new ArrayList(Arrays.asList(langs)); 

А затем распечатайте значения:

 langList.forEach(x -> System.out.println(x.toString())); 

Это приводит к:

 Language{name='Java', description='Java is a class-based, object-oriented programming language.'} 
 Language{name='Python', description='Python is an interpreted, high-level and general-purpose programming language.'} 
 Language{name='JS', description='JS is a programming language that conforms to the ECMAScript specification.'} 

Чтение JSON из файла

Мы не всегда имеем дело с JSON в строковом формате. Часто содержимое поступает из File . К счастью, Джексон делает эту задачу такой же простой, как и предыдущую, мы просто передаем File readValue() :

 final ObjectMapper objectMapper = new ObjectMapper(); 
 List<Language> langList = objectMapper.readValue( 
 new File("langs.json"), 
 new TypeReference<List<Language>>(){}); 
 
 langList.forEach(x -> System.out.println(x.toString())); 

langs.json содержит:

 [ 
 { 
 "name": "Java", 
 "description": "Java is a class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible." 
 }, 
 { 
 "name": "Python", 
 "description": "Python is an interpreted, high-level and general-purpose programming language. Created by Guido van Rossum and first released in 1991." 
 }, 
 { 
 "name": "JS", 
 "description": "JS is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm." 
 } 
 ] 

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

 Language{name='Java', description='Java is a class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible.'} 
 Language{name='Python', description='Python is an interpreted, high-level and general-purpose programming language. Created by Guido van Rossum and first released in 1991.'} 
 Language{name='JS', description='JS is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm.'} 

Заключение

В этой статье мы использовали Джексона для анализа и отображения значений из строки и файла JSON в массив и список Java.

Это делается с помощью readValue() , путем указания содержимого JSON (строки или файла) и указания POJO, с которым мы хотели бы сопоставить.

comments powered by Disqus