Рубрики
Без рубрики

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

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

Автор оригинала: 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);

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

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

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

List 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 из файла

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

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

final ObjectMapper objectMapper = new ObjectMapper();
List langList = 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, с которым мы хотели бы сопоставить.