Обработка JSON в Kotlin: библиотеки и примеры использования

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

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

Начать курс

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

JSON (JavaScript Object Notation) остаётся одним из самых популярных форматов для обмена данными между клиентом и сервером. В языке Kotlin, который активно используется для разработки Android-приложений и серверных решений, существует несколько мощных библиотек для работы с JSON. В этой статье мы подробно разберём основные инструменты: kotlinx.serialization, Gson, Moshi и Klaxon. Вы узнаете, как парсить JSON, сериализовать объекты и эффективно обрабатывать данные.

1. kotlinx.serialization — нативный подход от JetBrains

kotlinx.serialization — это официальная библиотека от создателей Kotlin. Её главное преимущество — полная интеграция с системой типов языка и поддержка мультиплатформенности (KMM). Для работы потребуется подключить плагин в 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

@Serializable
data class User(val id: Int, val name: String, val email: String)

fun main() {
    val jsonString = """{"id":1,"name":"Анна","email":"anna@example.com"}"""
    
    // Десериализация
    val user = Json.decodeFromString<User>(jsonString)
    println("Пользователь: ${user.name}, email: ${user.email}")
    
    // Сериализация
    val output = Json.encodeToString(user)
    println(output)
}

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

  • Не требует рефлексии (работает на этапе компиляции).
  • Поддерживает кастомные сериализаторы и полиморфизм.
  • Отлично подходит для Kotlin Multiplatform Mobile.

2. Gson — классика от Google

Библиотека Gson известна своей простотой и широкой распространённостью. Она использует рефлексию, поэтому подходит для проектов, где важна скорость настройки. Подключение:

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

Пример работы:

import com.google.gson.Gson

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

fun main() {
    val gson = Gson()
    val json = """{"id":101,"title":"Ноутбук","price":79990.0}"""
    
    // Парсинг
    val product = gson.fromJson(json, Product::class.java)
    println("Товар: ${product.title}, цена: ${product.price}")
    
    // Обратная конвертация
    val newJson = gson.toJson(product)
    println(newJson)
}

Плюсы и минусы:

  • + Минимум кода для базовых сценариев.
  • + Поддержка аннотаций @SerializedName для маппинга полей.
  • - Использование рефлексии может снижать производительность.
  • - Проблемы с обработкой null и generic-типов.

3. Moshi — современная альтернатива от Square

Moshi создавалась как более безопасная и быстрая замена Gson. Она также использует рефлексию, но предоставляет кодогенерацию через аннотацию @JsonClass. Подключение:

dependencies {
    implementation("com.squareup.moshi:moshi-kotlin:1.15.0")
    ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")
}

Пример использования с кодогенерацией:

import com.squareup.moshi.JsonClass
import com.squareup.moshi.Moshi

@JsonClass(generateAdapter = true)
data class Book(val isbn: String, val author: String, val year: Int)

fun main() {
    val moshi = Moshi.Builder().build()
    val adapter = moshi.adapter(Book::class.java)
    
    val json = """{"isbn":"978-5-17-123456-7","author":"Лев Толстой","year":2023}"""
    val book = adapter.fromJson(json)!!
    println("Книга: ${book.author} — ${book.isbn}")
    
    val backToJson = adapter.toJson(book)
    println(backToJson)
}

Преимущества:

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