Автор оригинала: David Landup.
Вступление
В этой статье мы преобразуем массив JSON в массив Java и Список Java с помощью Джексона .
Поскольку мы используем Джексона, вам придется добавить его в свой проект. Если вы используете Maven, это так же просто, как добавить зависимость:
com.fasterxml.jackson.core jackson-databind 2.11.2
Или, если вы используете 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 и класс, с которым мы хотели бы сопоставить. Поскольку мы сопоставляем массив языка
, мы также укажем это в методе 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);
Кроме того, вы можете извлечь значения непосредственно в список, используя ссылку Джексона Тип
:
ListlangList = objectMapper.readValue(json, new TypeReference >(){});
Без использования Ссылки на тип<>
, что рекомендуется, вы можете преобразовать массив в список с помощью любого другого подхода, доступного в вашем распоряжении, например:
ListlangList = 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 из файла
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Мы не всегда имеем дело с JSON в строковом формате. Часто содержимое поступает из файла |/. К счастью, Джексон делает эту задачу такой же простой, как и предыдущую, мы просто предоставляем
Файл методу
readValue() :
final ObjectMapper objectMapper = new ObjectMapper(); ListlangList = objectMapper.readValue( new File("langs.json"), new TypeReference >(){}); langList.forEach(x -> System.out.println(x.toString()));
В лангс.файл 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, с которым мы хотели бы сопоставить.