☕ Преобразуем массив JSON в массив Java или список с помощью Jackson
Вступление
В этой статье мы преобразуем массив JSON в массив Java и список Java с помощью Jackson.
Поскольку мы используем Jackson, вам придется добавить его в свой проект. Если вы используете 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;
Читаем 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 из Jackson, мы легко можем считывать значения и сопоставлять их с объектом или массивом объектов. Мы используем метод readValue(), передавая содержимое JSON и класс, с которым мы хотели бы сопоставить. Поскольку мы сопоставляем с массивом языков, мы также укажем это в методе readValue():
final ObjectMapper objectMapper = new ObjectMapper();
Language[] langs = objectMapper.readValue(json, Language[].class);
Кроме того, вы можете извлечь значения непосредственно в список, используя TypeReference:
List<Language> langList = objectMapper.readValue(json, new TypeReference<List<Language>>(){});
Вы можете преобразовать массив в список по-другому. Например так:
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 из файла
Зачастую содержимое поступает из файла. В таком случае мы просто предоставляем файл методу 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.'}
Заключение
В этой статье мы использовали Jackson для анализа и сопоставления значений из строки и файла JSON в массив и список Java.
Это можно сделать с помощью метода readValue(), указав содержимое JSON (строка или файл) и указания POJO, с которым мы будем сравнивать.