Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpApJsn 261 of 299 menu
◀ ▶

Разбор JSON-тела в Kotlin

Тело ответа API - это всегда текст. Перед разбором его удобно сохранить в переменную, даже если строка уже задана в программе. Кодек читает ключи по именам свойств data class, в том числе когда значение само является объектом.

Для блока user объявляют отдельный тип, а корневой тип ссылается на него полем. Оба класса помечают @Serializable:

import kotlinx.serialization.Serializable @Serializable data class Person(val name: String, val surn: String) @Serializable data class ProfileDoc(val user: Person, val city: String)

Готовый фрагмент JSON можно разобрать сразу в ProfileDoc и обратиться к вложенным полям через точку:

import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json @Serializable data class Person(val name: String, val surn: String) @Serializable data class ProfileDoc(val user: Person, val city: String) fun main() { val raw = """ { "user": { "name": "john", "surn": "smit" }, "city": "London" } """.trimIndent() val doc = Json.decodeFromString<ProfileDoc>(raw) println(doc.user.name) println(doc.city) }

Если в корне лежит массив строк, тип в угловых скобках указывают как List<String>. Порядок элементов в Kotlin совпадает с порядком в JSON:

import kotlinx.serialization.json.Json fun main() { val raw = """["alpha","beta","gamma"]""" val tags = Json.decodeFromString<List<String>>(raw) println(tags.joinToString(",")) }

Дана строка:

val raw = """ { "user": { "name": "john", "surn": "smit" }, "city": "London" } """.trimIndent()

Опишите @Serializable типы для user и корня. Выведите имя и город на отдельных строках.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить