Обработка JSON в Kotlin: полное руководство
JSON (JavaScript Object Notation) остаётся одним из самых популярных форматов обмена данными в веб-разработке, мобильных приложениях и микросервисах. Kotlin, будучи современным языком для JVM, Android и мультиплатформенных проектов, предлагает несколько мощных инструментов для работы с JSON. В этой статье мы подробно разберём основные библиотеки, их возможности и лучшие практики.
Зачем нужна библиотека для JSON в Kotlin?
Хотя Kotlin работает на JVM и может использовать Java-библиотеки, нативные Kotlin-решения (например, kotlinx.serialization) обеспечивают:
- Безопасность типов на этапе компиляции
- Поддержку data-классов и sealed-классов
- Мультиплатформенность (KMP)
- Минимальный boilerplate-код
Основные библиотеки для работы с JSON в Kotlin
1. kotlinx.serialization (рекомендуемый)
Это официальная библиотека JetBrains, встроенная в экосистему Kotlin. Она поддерживает мультиплатформенность и не требует рефлексии.
Подключение (Gradle):
plugins {
kotlin("jvm") version "1.9.22"
kotlin("plugin.serialization") version "1.9.22"
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
}
Пример парсинга JSON:
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class User(
val id: Int,
val name: String,
val email: String,
@SerialName("is_active") val isActive: Boolean = false
)
fun main() {
val jsonString = """
{
"id": 1,
"name": "Иван Петров",
"email": "ivan@example.com",
"is_active": true
}
""".trimIndent()
val user = Json.decodeFromString<User>(jsonString)
println("Пользователь: ${user.name}, активен: ${user.isActive}")
// Сериализация обратно в JSON
val jsonOutput = Json.encodeToString(user)
println(jsonOutput)
}
2. Gson (от Google)
Популярная Java-библиотека, которая легко адаптируется под Kotlin. Подходит для простых проектов без мультиплатформенности.
Пример:
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class Product(
@SerializedName("product_id") val id: Int,
val title: String,
val price: Double
)
fun main() {
val gson = Gson()
val json = """{"product_id": 101, "title": "Ноутбук", "price": 79999.99}"""
val product = gson.fromJson(json, Product::class.java)
println("Товар: ${product.title}, цена: ${product.price} руб.")
// Обратная сериализация
val jsonOut = gson.toJson(product)
println(jsonOut)
}
3. Moshi (от Square)
Современная альтернатива Gson с лучшей производительностью и поддержкой Kotlin-кодогенерации.
Пример:
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
data class Book(
val isbn: String,
val author: String,
val year: Int
)
fun main() {
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
val adapter = moshi.adapter(Book::class.java)
val json = """{"isbn": "978-5-17-123456-7", "author": "Лев Толстой", "year": 1877}"""
val book = adapter.fromJson(json)
println("Книга: ${book?.author} - ISBN: ${book?.isbn}")
}
Сравнение библиотек
- kotlinx.serialization — лучший выбор для новых проектов, мультиплатформенности и Android. Требует плагина компилятора.
- Gson — прост в использовании, подходит для быстрых прототипов и legacy-проектов на Java/Kotlin.
- Moshi — оптимален для высоконагруженных систем, имеет встроенную поддержку null-безопасности Kotlin.
Продвинутые техники обработки JSON
Работа с вложенными объектами и списками
@Serializable
data class Order(
val id: Long,
val items: List<OrderItem>,
val customer: Customer
)
@Serializable
data class OrderItem(
val productId: Int,
val Также в библиотеке
Конфигурация приложений PHP: библиотеки и инструменты для управления настройками
Реактивное программирование в JavaScript (Node.js): библиотека RxJS
Работа с CSV в TypeScript: библиотеки и примеры кода
PhotosUI для Swift: полное руководство с примерами
Машинное обучение на C#: библиотеки ML.NET и Accord.NET