Инструмент Tool Kumar

JSON в Kotlin: data-классы

Превратите пример JSON в data-классы для kotlinx.serialization. Вложенные объекты получают собственные классы, массивы становятся значениями List, а переименованные поля сохраняют исходные имена ключей через @SerialName.

Как пользоваться инструментом

  1. Вставьте типичный ответ, включая записи с разным набором полей.
  2. Проверьте сгенерированный код и при необходимости измените имя корня.
  3. Скопируйте или скачайте код, затем сверьте типы с контрактом вашего API.

Пример с разбором

Этот результат создан встроенным конвертером. По двум ценам товаров выводится тип поля с плавающей точкой. Значения null и строка в поле note дают тип, допускающий null.

Ввод

{
  "user-id": 42,
  "profile": {
    "city": "London",
    "created_at": "2026-10-14T09:00:00Z"
  },
  "items": [
    {
      "price": 12,
      "note": null
    },
    {
      "price": 12.5,
      "note": "gift"
    }
  ]
}

Результат

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

@Serializable
data class Root(
    @SerialName("user-id") val userId: Long,
    val profile: Profile,
    val items: List<Item>,
)

@Serializable
data class Profile(
    val city: String,
    @SerialName("created_at") val createdAt: String,
)

@Serializable
data class Item(
    val price: Double,
    val note: String? = null,
)

Декодирование ответа API в Android

Включите плагин компилятора Kotlin serialization и добавьте в приложение зависимость kotlinx.serialization для JSON. Используйте сгенерированный тип Root с Json.decodeFromString.

ignoreUnknownKeys позволяет принимать новые поля от сервера без ошибки. Включайте эту опцию, только если политика вашего API допускает неизвестные поля.

import kotlinx.serialization.json.Json

val json = Json { ignoreUnknownKeys = true }
val model = json.decodeFromString<Root>(responseBody)

Параметры и особые случаи

  • Генератор добавляет @Serializable к каждому data-классу и импортирует аннотации kotlinx.serialization. Аннотации Moshi @Json и Gson @SerializedName он не генерирует.
  • Для целых чисел используется Long, для дробных — Double. Поля, содержащие только null или значения разных типов, получают тип JsonElement. Nullable-поля по умолчанию равны null.
  • Целые числа за пределами диапазона 64-битных целых со знаком становятся Double, а это может привести к потере точности. Для точных идентификаторов используйте строки или собственный сериализатор.
  • Строки с датами остаются String. По одному примеру нельзя понять, обязательно ли поле в каждом ответе API.

Конфиденциальность по умолчанию

Документ остаётся в этом браузере. Tool Kumar разбирает и конвертирует данные, создаёт файлы для скачивания на вашем устройстве, без регистрации и отправки на сервер.

Вопросы об инструменте «JSON в Kotlin: data-классы»

Какую библиотеку сериализации Kotlin он использует?
kotlinx.serialization. В коде используется @Serializable, а @SerialName добавляется, когда имя свойства Kotlin отличается от ключа JSON.
Можно ли использовать результат с Moshi?
Типы полей помогут начать модель, но аннотации рассчитаны на kotlinx.serialization. Если ваше Android-приложение использует Moshi, замените их и настройте кодогенерацию Moshi.
Как обрабатываются отсутствующие поля и null?
Поля, которые отсутствуют в части записей массива или встречаются со значением null, становятся nullable и по умолчанию равны null. Обязательные поля без null значения по умолчанию не имеют.
Создаёт ли он Kotlin DTO для Android?
Да. Он создаёт data-классы, которые подходят в качестве DTO. Подключите в проекте плагин компилятора Kotlin serialization и runtime-библиотеку для JSON.

Похожие инструменты

JSON в Java, JSON в Dart и Генератор JSON Schema.