Перейти к основному содержимому

Создайте класс Java из JSON

· 3 мин. чтения

1. Обзор

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

В этом руководстве мы увидим, как создать класс Java из объекта JSON с помощью этой библиотеки.

2. Настройка

Мы можем преобразовать объект JSON в класс Java, используя зависимость jsonschema2pojo-core :

<dependency>
<groupId>org.jsonschema2pojo</groupId>
<artifactId>jsonschema2pojo-core</artifactId>
<version>1.1.1</version>
</dependency>

3. Преобразование классов JSON в Java

Давайте посмотрим, как написать программу с использованием библиотеки jsonschema2pojo , которая преобразует файл JSON в класс Java.

Во-первых, мы создадим метод convertJsonToJavaClass , который преобразует файл JSON в класс POJO и принимает четыре параметра:

  • URL -адрес файла inputJson
  • outputJavaClassDirectory, где будет создан POJO
  • packageName , которому будет принадлежать класс POJO, и
  • выходное имя класса POJO .

Затем мы определим шаги в этом методе:

  • Мы начнем с создания объекта класса JCodeModel , который будет генерировать класс Java.
  • Затем мы определим конфигурацию для jsonschema2pojo , которая позволит программе определить, что входной исходный файл имеет формат JSON ( метод getSourceType ) .
  • Кроме того, мы передадим эту конфигурацию в RuleFactory , которая будет использоваться для создания правил генерации типов для этого сопоставления .
  • Мы создадим SchemaMapper , используя эту фабрику вместе с объектом SchemaGenerator , который генерирует тип Java из предоставленного JSON.
  • Наконец, мы вызовем метод сборки JCodeModel , чтобы создать выходной класс.

Посмотрим на реализацию:

public void convertJsonToJavaClass(URL inputJsonUrl, File outputJavaClassDirectory, String packageName, String javaClassName) 
throws IOException {
JCodeModel jcodeModel = new JCodeModel();

GenerationConfig config = new DefaultGenerationConfig() {
@Override
public boolean isGenerateBuilders() {
return true;
}

@Override
public SourceType getSourceType() {
return SourceType.JSON;
}
};

SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());
mapper.generate(jcodeModel, javaClassName, packageName, inputJsonUrl);

jcodeModel.build(outputJavaClassDirectory);
}

4. Ввод и вывод

Давайте используем этот образец JSON для выполнения программы:

{
"name": "ForEach",
"area": "tech blogs",
"author": "ForEach",
"id": 32134,
"topics": [
"java",
"kotlin",
"cs",
"linux"
],
"address": {
"city": "Bucharest",
"country": "Romania"
}
}

Как только мы выполняем нашу программу, она создает следующий класс Java в заданном каталоге:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"name", "area", "author", "id", "topics", "address"})
@Generated("jsonschema2pojo")
public class Input {

@JsonProperty("name")
private String name;
@JsonProperty("area")
private String area;
@JsonProperty("author")
private String author;
@JsonProperty("id")
private Integer id;
@JsonProperty("topics")
private List<String> topics = new ArrayList<String>();
@JsonProperty("address")
private Address address;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

// getters & setters
// hashCode & equals
// toString
}

Обратите внимание, что он также создал новый класс Address для вложенного объекта JSON :

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"city", "country"})
@Generated("jsonschema2pojo")
public class Address {

@JsonProperty("city")
private String city;
@JsonProperty("country")
private String country;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

// getters & setters
// hashCode & equals
// toString
}

Мы также можем добиться всего этого, просто посетив jsonschema2pojo.org . Инструмент jsonschema2pojo берет документ схемы JSON (или YAML) и создает классы Java в стиле DTO. Он предоставляет множество опций, которые вы можете включить в класс Java, включая конструкторы, а также методы hashCode, equals и toString .

5. Вывод

В этом руководстве мы рассмотрели, как создать класс Java из JSON с примерами, используя библиотеку jsonschema2pojo .

Как обычно, фрагменты кода доступны на GitHub .