Кодирование и декодирование JSON
Преобразуйте данные в JSON и обратно
«Кодирование и декодирование JSON» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Объект Json
Объект Json является основой кодирования и декодирования. Экземпляр по умолчанию готов к использованию, но Вы также можете создать настроенный экземпляр.
import kotlinx.serialization.json.Json
val json = JsonКодирование в строку
Используйте encodeToString, чтобы преобразовать объект в строку JSON.
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Serializable
data class Book(val title: String, val pages: Int)
fun main() {
val book = Book("Kotlin in Action", 360)
val text = Json.encodeToString(book)
println(text)
}Декодирование из строки
Используйте decodeFromString, чтобы снова преобразовать JSON в объект. Целевой тип определяется автоматически или указывается явно.
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
@Serializable
data class Book(val title: String, val pages: Int)
fun main() {
val text = "{\"title\":\"Atomic Kotlin\",\"pages\":500}"
val book = Json.decodeFromString<Book>(text)
println(book.title)
}Кодирование списков
Коллекции кодируются автоматически. Список сериализуемых объектов становится массивом JSON.
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Serializable
data class Tag(val name: String)
fun main() {
val tags = listOf(Tag("kotlin"), Tag("json"))
println(Json.encodeToString(tags))
}Форматирование с отступами
Настройте построитель Json { }, чтобы включить вывод с отступами, полезный для ведения журнала и отладки.
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Serializable
data class Point(val x: Int, val y: Int)
val pretty = Json { prettyPrint = true }
fun main() {
println(pretty.encodeToString(Point(1, 2)))
}Игнорирование неизвестных ключей
По умолчанию декодирование завершается ошибкой, если JSON содержит ключи, отсутствующие в Вашем классе. Установите ignoreUnknownKeys = true, чтобы пропускать их — это удобно для развивающихся программных интерфейсов.
import kotlinx.serialization.json.Json
val lenient = Json { ignoreUnknownKeys = true }Кодирование значений по умолчанию
По умолчанию свойства, равные своим значениям по умолчанию, не записываются. Включите encodeDefaults = true, чтобы всегда их добавлять.
import kotlinx.serialization.json.Json
val withDefaults = Json { encodeDefaults = true }Работа с JsonElement
Для динамического JSON можно выполнить разбор в дерево JsonElement, а не в типизированный класс.
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
fun main() {
val element: JsonElement = Json.parseToJsonElement("{\"a\":1}")
println(element)
}Чтение полей JsonObject
Приведите JsonElement к типу JsonObject и получите доступ к полям по ключу, после чего преобразуйте примитивы.
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.int
fun main() {
val obj = Json.parseToJsonElement("{\"a\":1}").jsonObject
val a = obj["a"]!!.jsonPrimitive.int
println(a)
}Преобразование туда и обратно
После кодирования и последующего декодирования должен получиться равный объект — это преобразование туда и обратно. Такой подход отлично подходит для быстрой проверки корректности модели.
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
@Serializable
data class P(val x: Int)
fun main() {
val original = P(42)
val back = Json.decodeFromString<P>(Json.encodeToString(original))
println(original == back)
}Распространённые ошибки декодирования
Обратите внимание на следующие исключения времени выполнения:
SerializationException: Unexpected JSON token— некорректный JSON- Отсутствует обязательное поле — в JSON нет свойства без значения по умолчанию
- Неизвестный ключ — отключите строгую проверку с помощью
ignoreUnknownKeys
Быстрая проверка
Ваш программный интерфейс часто добавляет новые поля JSON. Какая настройка не даст декодированию завершиться ошибкой?
Итоги
Теперь Вы умеете преобразовывать объекты в JSON и обратно:
encodeToString/decodeFromString- Настройка с помощью
Json { }:prettyPrint,ignoreUnknownKeys,encodeDefaults - Разбор динамического JSON через
JsonElement
Далее Вы изучите пользовательские сериализаторы для неподдерживаемых типов.
Часто задаваемые вопросы
Урок «Кодирование и декодирование JSON» бесплатный?
Да — полный текст урока «Кодирование и декодирование JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Кодирование и декодирование JSON»?
Преобразуйте данные в JSON и обратно Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Кодирование и декодирование JSON»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Настройка kotlinx.serialization
- Сериализуемые классы
- Кодирование и декодирование JSON
- Пользовательские сериализаторы