Инструмент Tool Kumar
JSON в Kotlin: data-классы
Превратите пример JSON в data-классы для kotlinx.serialization. Вложенные объекты получают собственные классы, массивы становятся значениями List, а переименованные поля сохраняют исходные имена ключей через @SerialName.
Как пользоваться инструментом
- Вставьте типичный ответ, включая записи с разным набором полей.
- Проверьте сгенерированный код и при необходимости измените имя корня.
- Скопируйте или скачайте код, затем сверьте типы с контрактом вашего 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.