Как пользоваться
- Вставьте пример JSON — лучше с несколькими элементами в каждом массиве, чтобы нашлись необязательные ключи.
- Выберите data class без аннотаций или с аннотациями kotlinx.serialization.
- Скопируйте код в файл .kt и переименуйте Root и другие классы под свою задачу.
Как это работает
Пример разбирается в «форму»: каждый ключ со всеми встреченными там типами; все объекты одного массива сливаются в один класс.
- Имена классов берутся из ключей: items хранит List
- , line_items — List
. Root идёт первым. - , line_items — List
- Свойства — 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.