JSON в класс Java

Вставьте образец JSON, и генератор выдаст один или несколько классов Java с правильными типами полей, геттерами, сеттерами и аннотациями JSON-библиотеки. Для более чистого кода поддерживаются Jackson (@JsonProperty), Gson (@SerializedName) и Lombok (@Data/@Builder). Вложенные объекты становятся внутренними или соседними классами в зависимости от выбранной компоновки.

Как преобразовать JSON в Java

  1. 1

    Вставьте JSON

    Достаточно одного образца; несколько образцов улучшают определение того, может ли поле быть null.

  2. 2

    Выберите библиотеку

    Jackson (самый распространённый в Spring), Gson (для Android и некоторых устаревших проектов) или простой POJO без аннотаций.

  3. 3

    Выберите дополнительные опции

    Lombok, для автогенерации геттеров/сеттеров, паттерна builder, equals/hashCode. Либо оставьте код без них.

  4. 4

    Выберите стиль вложенности

    Соседние классы в одном файле (public-классы в Java 17+ должны быть в отдельных файлах) или вложенные статические классы.

  5. 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. Сравнивайте токены, синтаксис движков, якоря, группы, проверки и флаги.

Инструмент доступен на других языках