JSON в класс Java
Вставьте образец JSON, и генератор выдаст один или несколько классов Java с правильными типами полей, геттерами, сеттерами и аннотациями JSON-библиотеки. Для более чистого кода поддерживаются Jackson (@JsonProperty), Gson (@SerializedName) и Lombok (@Data/@Builder). Вложенные объекты становятся внутренними или соседними классами в зависимости от выбранной компоновки.
Как преобразовать JSON в Java
-
1
Вставьте JSON
Достаточно одного образца; несколько образцов улучшают определение того, может ли поле быть null.
-
2
Выберите библиотеку
Jackson (самый распространённый в Spring), Gson (для Android и некоторых устаревших проектов) или простой POJO без аннотаций.
-
3
Выберите дополнительные опции
Lombok, для автогенерации геттеров/сеттеров, паттерна builder, equals/hashCode. Либо оставьте код без них.
-
4
Выберите стиль вложенности
Соседние классы в одном файле (public-классы в Java 17+ должны быть в отдельных файлах) или вложенные статические классы.
-
5
Скопируйте код
Вставьте его в свой проект. Имена классов совпадают с ключами JSON, а пакет задаётся согласно вашей настройке.
Пример вывода: Jackson + Lombok
Ввод:
{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }
Вывод:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty("firstName")
private String firstName;
@JsonProperty("age")
private int age;
@JsonProperty("address")
private Address address;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {
@JsonProperty("city")
private String city;
}
Сопоставление типов
| JSON | Тип в Java |
|---|---|
| строка | String |
| целое число (≤ Integer.MAX) | Integer / int |
| большое целое число | Long / BigInteger |
| десятичное число | Double / BigDecimal |
| логическое значение | Boolean / boolean |
| дата ISO | LocalDate (Jackson JSR-310) |
| дата и время ISO | Instant / OffsetDateTime |
| null (при наличии соседнего не-null поля) | Обёрточный тип (например, Integer) |
| массив | List<T> |
| объект | вложенный класс |
Выбор между обёрточным и примитивным типом
- Примитивный тип (
int,long,boolean), не может быть null, эффективен, без автоупаковки. - Обёрточный тип (
Integer,Long,Boolean), допускает null; необходим, если поле может отсутствовать или быть null в JSON.
По умолчанию генератор использует обёрточный тип для всего, что считается допускающим null, и примитивный, в остальных случаях.
Jackson и Gson
| Возможность | Jackson | Gson |
|---|---|---|
| Распространённость в Spring | Да, по умолчанию | Нет (нужна настройка) |
| Производительность | Быстрее | Медленнее |
| Поддержка дат JSR-310 | Через отдельный модуль | Через отдельный модуль |
| Полиморфизм | @JsonTypeInfo |
RuntimeTypeAdapter |
| Терпимость к висячей запятой | Нет (по умолчанию) | Да |
Частые ошибки
- Использование примитивных типов для полей, допускающих null.
intне может быть null; Jackson выбросит ошибку, если в JSON окажется"age": null. ИспользуйтеInteger. - Отсутствие модулей для дат. Jackson требует
jackson-datatype-jsr310дляInstant/LocalDate. Без него даты откатываются кStringили к значениям long в формате epoch. - Совместное использование обёрточных типов в несвязанных классах. Если в двух JSON-структурах есть вложенный
Address, генератор создаст два классаAddress. Переименуйте или объедините их вручную. - Забытый
@JsonIgnoreProperties(ignoreUnknown = true). Строгий Jackson выбрасывает ошибку на неизвестных свойствах; добавьте эту аннотацию (или настройте её глобально) для терпимой десериализации.
Часто задаваемые вопросы
В большинстве случаев Jackson, это стандарт в Spring, он быстрее и имеет более богатую поддержку полиморфизма. Gson легче и лучше известен в мире Android, хотя Android-проекты всё чаще используют Moshi или kotlinx.serialization.
Lombok убирает много шаблонного кода (геттеры, сеттеры, equals, hashCode, builder). Он широко распространён, но требует наличия процессора аннотаций Lombok в сборке. Отключите его, если ваш проект избегает Lombok из соображений чистоты зависимостей.
Поля, оказавшиеся null хотя бы в одном из наблюдаемых образцов, становятся обёрточными типами (Integer вместо int), чтобы могли хранить null. После этого Jackson без ошибок десериализует "age": null. Добавьте @JsonInclude(Include.NON_NULL), чтобы пропускать null при сериализации.
Да, если выбрать «record». Записи (record) лаконичны, неизменяемы и работают с Jackson 2.12+. Для проектов на Spring Boot 3 сочетание record и генерации без Lombok, современный выбор.
Сопутствующие инструменты
Справочная таблица ASCII
Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.
Справочник сочетаний клавиш
Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.
Справочник символов HTML
Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.
Шпаргалка по Markdown
Практический справочник Markdown с настоящим предпросмотром и готовыми для копирования примерами заголовков, списков, таблиц, кода, ссылок, изображений и синтаксиса GFM.
Счетчик FPS
Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.
Шпаргалка по регулярным выражениям
Поисковый справочник регулярных выражений для JavaScript, PCRE2/PHP, Python re и .NET. Сравнивайте токены, синтаксис движков, якоря, группы, проверки и флаги.
Инструмент доступен на других языках
- JSON vers classe Java [FR]
- JSON till Java-klass [SV]
- JSON เป็นคลาส Java [TH]
- JSON إلى فئة Java [AR]
- JSON ke Kelas Java [ID]
- JSON sang lớp Java [VI]
- JSON을 Java 클래스로 [KO]
- JSON zu Java-Klasse [DE]
- JSON a Clase Java [ES]
- JSON naar Java-klasse [NL]
- JSON na klasę Java [PL]
- JSON から Java クラスへ [JA]
- JSON para Classe Java [PT]
- JSON'dan Java Sınıfına [TR]
- JSON 转 Java 类 [ZH]
- JSON to Java Class [EN]
- JSON in classe Java [IT]