Генератор классов Java из JSON

Вставьте ответ API в JSON и получите типы Java в одном файле. Выберите классические классы с приватными полями, геттерами и сеттерами или компактные record (Java 16+). Ключи, которые не подходят как имена в camelCase, получают @JsonProperty из Jackson, и соответствие остаётся точным.

Генерировать

Работает в браузере: всё, что вы вводите, никуда не отправляется.

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

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

Как это работает

Пример разбирается в «форму»: для каждого ключа — все типы, которые встретились на этом месте. Все объекты одного массива сливаются в один класс.

  • Имена полей — camelCase: order_id → orderId, gift_note → giftNote. Геттеры по правилам JavaBeans: getOrderId(), а для примитива boolean — isPaid().
  • Имена классов берутся из ключей: items хранит List, customer становится Customer.
  • Импортируется только нужное: java.util.List и com.fasterxml.jackson.annotation.JsonProperty.
  • Если на верхнем уровне массив, комментарий подскажет тип для чтения, например List.

Пример

{"items":[{"sku":"A","note":null,"qty":1},{"sku":"B","note":"x"}]} в виде record даёт:

import java.util.List;

public record Root(
    List<Item> items
) {
    public record Item(
        String sku,
        String note,
        Long qty
    ) {}
}

qty нет во втором элементе, поэтому это обёртка Long, которая может быть null.

Советы

  • Читайте через Jackson: new ObjectMapper().readValue(json, Root.class).
  • Добавьте @JsonIgnoreProperties(ignoreUnknown = true), если в реальных данных могут быть ключи, которых не было в примере.
  • Проверьте числовые типы: цена, которая в примере всегда была целой, станет long.

Частые вопросы

Как типы JSON сопоставляются с Java?

Строки становятся String, true и false — boolean, целые числа — long, остальные — double (смесь — double). Массивы становятся List<T>, объекты — отдельными классами, а место со значениями разных видов — Object.

Когда используется Long вместо long?

Примитив не может хранить null. Если в примере у числа или логического значения есть null или ключа нет в части объектов массива, берётся обёртка: Long, Double, Boolean. Внутри List<...> обёртка используется всегда — этого требуют дженерики Java.

Почему остальные классы вложены в Root?

В одном файле Java может быть только один публичный класс верхнего уровня. Вложенные public static классы (или вложенные record) делают результат одним файлом Root.java, который компилируется как есть. Обращайтесь к ним как Root.Item или вынесите в отдельные файлы.

Что происходит с ключами вроде first-name или class?

Имена полей — camelCase из ключа: first-name становится firstName, а ключевое слово Java получает подчёркивание: class_. С Jackson такие поля получают @JsonProperty("first-name"), без него исходный ключ сохраняется в комментарии.

Работают ли record с Jackson?

Да, Jackson 2.12 и новее десериализует record через канонический конструктор, а @JsonProperty на компоненте record работает так же, как на поле.

Ещё в разделе «Разработчикам»

Все инструменты раздела: Разработчикам ·Обновлено 4 ноября 2026 г.

Настройки конфиденциальности

Google Analytics показывает нам, какими инструментами пользуются и работают ли они. Он может ставить cookie. Ваш выбор сохраняется в этом браузере.