Генератор data class Kotlin из JSON

Вставьте ответ API в JSON и получите для него data class на Kotlin. Классы без аннотаций подходят для Gson, Moshi или Jackson; вариант kotlinx.serialization добавляет @Serializable к каждому классу и @SerialName там, где ключ не похож на имя в camelCase.

Аннотации

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

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

  1. Вставьте пример JSON — лучше с несколькими элементами в каждом массиве, чтобы нашлись необязательные ключи.
  2. Выберите data class без аннотаций или с аннотациями kotlinx.serialization.
  3. Скопируйте код в файл .kt и переименуйте Root и другие классы под свою задачу.

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

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

  • Имена классов берутся из ключей: items хранит List, line_items — List. Root идёт первым.
  • Свойства — val, по одному в строке, с запятой в конце (Kotlin 1.4+).
  • С kotlinx.serialization импортируются Serializable, SerialName и JsonElement — только если они нужны.
  • Массив на верхнем уровне даёт typealias, например typealias Root = List.

Пример

{"line_items":[{"sku":"A","note":null,"qty":1},{"sku":"B","note":"x"}]} с kotlinx.serialization даёт:

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Root(
    @SerialName("line_items")
    val lineItems: List<LineItem>,
)

@Serializable
data class LineItem(
    val sku: String,
    val note: String?,
    val qty: Long? = null,
)

Советы

  • Разбирайте так: Json.decodeFromString<Root>(text); добавьте Json { ignoreUnknownKeys = true }, если в реальных данных больше ключей, чем в примере.
  • Замените Long на Int там, где значения заведомо небольшие.
  • В Android-проектах с Gson выберите «Без аннотаций» и замените комментарии на @SerializedName.

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

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

Строки становятся String, true и false — Boolean, целые числа — Long, остальные — Double (смесь — Double). Массивы становятся List<T>, объекты — отдельными data class. Место со значениями разных видов получает Any? без аннотаций и JsonElement? с kotlinx.serialization.

Чем String? отличается от String? = null?

Значение, которое в примере равно null, получает String?: ключ должен быть, но может быть null. Ключ, которого нет в части объектов массива, получает String? = null — тогда разбор работает и без ключа; kotlinx.serialization для этого нужно значение по умолчанию.

Что происходит с ключами вроде order_id или in?

Имена свойств — camelCase: order_id становится orderId. С kotlinx.serialization исходный ключ уходит в @SerialName("order_id"); без аннотаций он сохраняется в комментарии, и можно добавить аннотацию своей библиотеки (@SerializedName для Gson, @Json для Moshi). Ключевое слово Kotlin, например in, пишется в обратных кавычках.

Почему пустой объект стал обычным классом?

У data class в конструкторе должно быть хотя бы одно свойство, поэтому объект без ключей становится class Meta (или @Serializable class Meta).

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

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

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

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