Arbeiten mit JSON in Kotlin: Parsing und Serialisierung für Anfänger
JSON (JavaScript Object Notation) ist das beliebteste Datenaustauschformat in modernen Webanwendungen und APIs. Wenn Sie mit dem Lernen von Kotlin begonnen haben, werden Sie früher oder später auf die Notwendigkeit stoßen, JSON-Strings in Objekte Ihrer Anwendung zu konvertieren (Deserialisierung oder Parsing) und umgekehrt (Serialisierung).
In diesem Artikel werden wir die grundlegenden Methoden der Arbeit mit JSON in Kotlin anhand von drei beliebten Bibliotheken untersuchen: kotlinx.serialization, Gson und Moshi. Sie erfahren, wie Sie schnell mit dem Parsen von JSON und dem Serialisieren von Daten beginnen können, ohne unnötige Komplexität.
Was ist JSON-Parsing und -Serialisierung?
Bevor wir zum Code übergehen, definieren wir die Begriffe:
- Serialisierung — ist der Prozess der Umwandlung eines Objekts (z. B. einer Kotlin-Datenklasse) in einen JSON-String.
- Parsing (Deserialisierung) — ist der umgekehrte Prozess: Aus einem JSON-String erhalten wir ein Objekt eines bestimmten Typs.
Die Interaktion mit JSON in Kotlin kann auf verschiedene Weise organisiert werden. Es gibt keine integrierte JSON-Unterstützung in der Sprache, daher verwenden wir externe Bibliotheken.
Die Bibliothek kotlinx.serialization (empfohlene Methode)
kotlinx.serialization ist die offizielle Bibliothek von JetBrains, die sich perfekt in die Sprache Kotlin integriert. Sie unterstützt Multiplattform (JVM, JS, Native) und arbeitet zur Kompilierungszeit, was sie sehr schnell und sicher macht.
Installation
Fügen Sie das Plugin in die Datei build.gradle.kts ein:
plugins { kotlin("plugin.serialization") version "1.9.0"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")}Beispiel: JSON parsen
Angenommen, wir haben einen JSON mit Benutzerdaten:
{ "name": "Ivan", "age": 28, "email": "ivan@example.com"}Erstellen wir eine data class und markieren sie mit der Annotation @Serializable:
import kotlinx.serialization.Serializableimport kotlinx.serialization.json.Json
@Serializabledata class User( val name: String, val age: Int, val email: String)
fun main() { val jsonString = """ {"name": "Ivan", "age": 28, "email": "ivan@example.com"} """.trimIndent()
val user = Json.decodeFromString<User>(jsonString) println(user) // User(name=Ivan, age=28, email=ivan@example.com)}Beispiel: Serialisierung in JSON
fun main() { val user = User(name = "Anna", age = 25, email = "anna@example.com") val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Anna","age":25,"email":"anna@example.com"}}Vorteile: Typsicherheit, Geschwindigkeit, keine Reflexion, Unterstützung für nullable-Felder, Standardwerte und verschachtelte Objekte.
Die Bibliothek Gson (von Google)
Gson ist eine der ältesten und beliebtesten Bibliotheken für die Arbeit mit JSON im JVM-Ökosystem. Sie ist einfach zu bedienen, verwendet aber Reflexion, was etwas langsamer ist als kotlinx.serialization.
Installation
dependencies { implementation("com.google.code.gson:gson:2.10.1")}Beispiel: JSON parsen
import com.google.gson.Gson
data class Product( val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson() val jsonString = """{"id": 101, "title": "Laptop", "price": 75000.0}"""
val product = gson.fromJson(jsonString, Product::class.java) println(product) // Product(id=101, title=Laptop, price=75000.0)}Beispiel: Serialisierung in JSON
fun main() { val product = Product(id = 202, title = "Maus", price = 2