Конвертер JSON в data class Kotlin
Генерируйте из JSON data class Kotlin со вспомогательными методами toJson и fromJson.
Генерация data class Kotlin из JSON
Data class в Kotlin — естественный тип модели для JSON на Android и JVM. Конвертер создаёт по одному data class на каждый объект с неизменяемыми свойствами val: целые числа становятся Long, дробные — Double, массивы — List<T>, а вложенные объекты — собственными data class. Сгенерированный код использует библиотеку Klaxon и добавляет метод toJson и функцию fromJson в companion object, так что одним вызовом строка JSON превращается в типизированный объект.
Как пользоваться
- Вставьте пример JSON — например, ответ, который получает ваше Android-приложение.
- Введите имя корневого класса, например Movie.
- Добавьте зависимость Klaxon, вставьте классы в .kt-файл своего пакета и вызовите Movie.fromJson(jsonString).
Часто задаваемые вопросы
- Можно ли использовать эти классы с kotlinx.serialization, Moshi или Gson?
- Да. Объявления data class — обычный Kotlin. Удалите вспомогательный код Klaxon и добавьте к каждому классу аннотацию вашей библиотеки, например @Serializable для kotlinx.serialization.
- Как генерируются nullable-поля?
- Поля, которые в части примера равны null или отсутствуют, получают nullable-типы, например String?, и null-безопасность Kotlin заставляет их обрабатывать.
- Почему Long, а не Int?
- У целых чисел в JSON нет ограничения по размеру, поэтому Long защищает от переполнения. Если вы знаете, что значения небольшие, — например, год или счётчик, — замените тип свойства на Int.
Пример: JSON в Kotlin
Исходный JSON
{
"id": 12,
"title": "Arrival",
"year": 2016,
"genres": ["sci-fi", "drama"],
"rating": 7.9
}Сгенерированный код: Kotlin (Movie)
// To parse the JSON, install Klaxon and do:
//
// val movie = Movie.fromJson(jsonString)
package quicktype
import com.beust.klaxon.*
private val klaxon = Klaxon()
data class Movie (
val id: Long,
val title: String,
val year: Long,
val genres: List<String>,
val rating: Double
) {
public fun toJson() = klaxon.toJsonString(this)
companion object {
public fun fromJson(json: String) = klaxon.parse<Movie>(json)
}
}