Обработка JSON в Kotlin: библиотеки и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Обработка JSON в Kotlin: библиотеки, инструменты и примеры кода

JSON (JavaScript Object Notation) — один из самых популярных форматов обмена данными в современной веб-разработке. При создании приложений на Kotlin, будь то Android, бэкенд или десктоп, почти всегда требуется парсить и генерировать JSON. В этой статье мы подробно разберём основные библиотеки для работы с JSON в Kotlin, их возможности, преимущества и приведём практические примеры кода.

Зачем нужна отдельная обработка JSON в Kotlin?

Kotlin — статически типизированный язык, работающий поверх JVM (а также Native и JS). В отличие от динамических языков, где JSON можно преобразовать в словарь «на лету», в Kotlin принято работать с типизированными объектами. Это повышает надёжность кода и позволяет IDE автоматически подсказывать поля. Для преобразования JSON в объекты Kotlin (data-классы) и обратно используются библиотеки сериализации/десериализации.

Основные библиотеки для JSON в Kotlin

Рассмотрим три наиболее популярные библиотеки: kotlinx.serialization (рекомендуемая от JetBrains), Gson (от Google) и Moshi (от Square).

1. kotlinx.serialization

Это официальная библиотека для сериализации в Kotlin, поддерживаемая JetBrains. Она работает на мультиплатформенной основе (JVM, Native, JS) и не использует рефлексию, что даёт высокую производительность и безопасность типов.

Установка: добавьте плагин и зависимость в build.gradle.kts:

plugins {
    kotlin("plugin.serialization") version "1.9.22"
}

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
}

Пример использования:

import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString

@Serializable
data class User(val name: String, val age: Int, val email: String? = null)

fun main() {
    val json = Json { prettyPrint = true; ignoreUnknownKeys = true }

    // Сериализация (объект -> JSON)
    val user = User("Алексей", 30, "alex@example.com")
    val jsonString = json.encodeToString(user)
    println(jsonString)

    // Десериализация (JSON -> объект)
    val input = """{"name":"Мария","age":25}"""
    val parsedUser = json.decodeFromString<User>(input)
    println(parsedUser)
}

Особенности:

  • Поддержка nullable полей (как email в примере).
  • Настройки через DSL: prettyPrint, ignoreUnknownKeys и другие.
  • Работа с enum, sealed-классами, вложенными объектами.
  • Мультиплатформенность — один код для Android, iOS, веба.

2. Gson

Gson — классическая библиотека от Google, широко используемая в Java-мире. В Kotlin она тоже работает, но требует осторожности с nullable-типами и data-классами.

Установка:

dependencies {
    implementation("com.google.code.gson:gson:2.10.1")
}

Пример:

import com.google.gson.Gson
import com.google.gson.GsonBuilder

data class Product(val id: Int, val title: String, val price: Double)

fun main() {
    val gson: Gson = GsonBuilder().setPrettyPrinting().create()

    // Сериализация
    val product = Product(1, "Ноутбук", 89999.99)
    val json = gson.toJson(product)
    println(json)

    // Десериализация
    val jsonString = """{"id":2,"title":"Мышь","price":1500.50}"""
    val parsed = gson.fromJson(jsonString, Product::class.java)
    println(parsed)
}

Важно: Gson использует рефлексию, поэтому для Kotlin data-классов может потребоваться @JvmOverloads или настройка GsonBuilder для работы с Kotlin-модулем. Рекомендуется подключать kotlin-reflect:

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-reflect:1.9.22")
}

3. Moshi

Moshi — современная библиотека от Square, созданная с учётом опыта Gson. Она более производительна и лучше поддерживает Kotlin (в том числе nullable-типы и значения по умолчанию).

Установка:

dependencies {
    implementation("com.square                    

Рекомендаций