Обработка 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