0Pricing
Kotlin Academy · Урок

Кодирование и декодирование 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 — локальная установка не требуется.

Все уроки этого курса

  1. Настройка kotlinx.serialization
  2. Сериализуемые классы
  3. Кодирование и декодирование JSON
  4. Пользовательские сериализаторы
← Назад к Kotlin Academy