Конвертер 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 превращается в типизированный объект.

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

  1. Вставьте пример JSON — например, ответ, который получает ваше Android-приложение.
  2. Введите имя корневого класса, например Movie.
  3. Добавьте зависимость 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)
    }
}

Преобразовать JSON в другие языки