JSON-Verarbeitung in Kotlin: Überblick über Bibliotheken und praktische Beispiele
JSON (JavaScript Object Notation) bleibt eines der beliebtesten Formate für den Datenaustausch zwischen Client und Server. In der Sprache Kotlin, die aktiv für die Entwicklung von Android-Apps und Serverlösungen verwendet wird, gibt es mehrere leistungsstarke Bibliotheken für die Arbeit mit JSON. In diesem Artikel werden wir die wichtigsten Werkzeuge im Detail besprechen: kotlinx.serialization, Gson, Moshi und Klaxon. Sie erfahren, wie man JSON parst, Objekte serialisiert und Daten effizient verarbeitet.
1. kotlinx.serialization — nativer Ansatz von JetBrains
kotlinx.serialization ist die offizielle Bibliothek der Kotlin-Entwickler. Ihr Hauptvorteil ist die vollständige Integration in das Typsystem der Sprache und die Unterstützung von Multiplattform (KMM). Für die Arbeit muss das Plugin in build.gradle.kts eingebunden werden:
plugins { kotlin("plugin.serialization") version "1.9.22"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Beispiel für Serialisierung und Deserialisierung von Daten:
import kotlinx.serialization.Serializableimport kotlinx.serialization.json.Json
@Serializabledata class User(val id: Int, val name: String, val email: String)
fun main() { val jsonString = """{"id":1,"name":"Anna","email":"anna@example.com"}""" // Deserialisierung val user = Json.decodeFromString<User>(jsonString) println("Benutzer: ${user.name}, E-Mail: ${user.email}") // Serialisierung val output = Json.encodeToString(user) println(output)}Besonderheiten:
- Benötigt keine Reflektion (arbeitet zur Kompilierzeit).
- Unterstützt benutzerdefinierte Serialisierer und Polymorphie.
- Ideal geeignet für Kotlin Multiplatform Mobile.
2. Gson — Klassiker von Google
Die Bibliothek Gson ist bekannt für ihre Einfachheit und weite Verbreitung. Sie verwendet Reflektion und eignet sich daher für Projekte, bei denen eine schnelle Einrichtung wichtig ist. Einbindung:
dependencies { implementation("com.google.code.gson:gson:2.10.1")}Arbeitsbeispiel:
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":"Laptop","price":79990.0}""" // Parsing val product = gson.fromJson(json, Product::class.java) println("Produkt: ${product.title}, Preis: ${product.price}") // Rückkonvertierung val newJson = gson.toJson(product) println(newJson)}Vorteile und Nachteile:
- + Minimaler Code für grundlegende Szenarien.
- + Unterstützung der Annotation
@SerializedNamefür Feld-Mapping. - - Die Verwendung von Reflektion kann die Leistung beeinträchtigen.
- - Probleme bei der Verarbeitung von
nullund generischen Typen.
3. Moshi — moderne Alternative von Square
Moshi wurde als sicherer und schnellerer Ersatz für Gson entwickelt. Es verwendet ebenfalls Reflektion, bietet aber Codegenerierung durch die Annotation @JsonClass. Einbindung:
dependencies { implementation("com.squareup.moshi:moshi-kotlin:1.15.0") ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")}Anwendungsbeispiel mit Codegenerierung:
import com.squareup.moshi.JsonClassimport 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","autho