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

Преобразователь JSON в классы Java — Numio

Генерирует классы Java из JSON: страница запускает json_typegen (WebAssembly) в режиме Kotlin и переписывает каждый data class в класс Java с приватными полями, конструктором со всеми аргументами, геттерами и сеттерами.

JSON

Java

Когда пригодится

  • Создать POJO для десериализации ответа REST с помощью Jackson.
  • Набросать DTO-классы для контроллера Spring по примеру payload.

Как пользоваться

  1. Вставьте JSON-объект или массив в левый редактор.
  2. Изучите классы: корневой называется Root, а вложенные объекты становятся отдельными классами, названными по своему ключу.
  3. Скопируйте их в отдельные файлы .java (импорты List и Jackson уже включены) и при необходимости поправьте типы.

JSON

{
  "id": 42,
  "user_name": "ada",
  "active": true,
  "tags": ["admin", "editor"]
}

Классы Java

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Root {
	private Long id;
	@JsonProperty("user_name")
	private String userName;
	private Boolean active;
	private List<String> tags;

	public Root(Long id, String userName, Boolean active, List<String> tags) {
		this.id = id;
		this.userName = userName;
		this.active = active;
		this.tags = tags;
	}

	public Long getId() {
		return this.id;
	}

…

Подробности и ограничения

Генерация выполняется в браузере с помощью WebAssembly; настроек нет.

Ключи в snake_case становятся полями в camelCase с аннотацией Jackson @JsonProperty; импорт Jackson и java.util.List добавляются, когда используются.

Числа отображаются в Long или Double, булевы значения — в Boolean; геттеры для boolean используют get, а не is.

Значение null типизируется как Object, а массив из null — как List<?>. Замените их конкретными типами, когда узнаете реальные данные.

FAQ

Можно ли преобразовать JSON-массив на корневом уровне?

Да. Корень становится классом-обёрткой Root с полем List<Root2>, а элементы массива — классом Root2.

Обрабатываются ли необязательные поля?

Ключи, отсутствующие в некоторых элементах массива, обнаруживаются, но в выводе Java пометка необязательности отбрасывается, поэтому каждое поле — обычный nullable тип-обёртка.

Генерирует ли он аннотации Lombok или records?

Нет. Он пишет обычные классы с явными конструкторами, геттерами и сеттерами.

Как типизируются значения null?

Поле, равное null в образце, становится Object (private Object note;), поскольку вывести конкретный тип невозможно. Дайте образец с реальным значением, чтобы получить String, Long или вложенный класс.

Спецификации и справка