Arbeiten mit JSON in Kotlin: Parsen und Serialisieren von Daten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit JSON in Kotlin: Vollständiger Leitfaden für Parsing und Serialisierung



JSON (JavaScript Object Notation) bleibt eines der beliebtesten Datenformate im modernen Webentwicklung. Bei der Arbeit mit Kotlin, sei es serverseitig mit Ktor oder in einer mobilen Android-App, ist die Fähigkeit, JSON effizient zu parsen und zu serialisieren, eine unverzichtbare Fähigkeit. In diesem Artikel betrachten wir drei Hauptansätze für die Arbeit mit JSON in Kotlin: die Verwendung der Bibliotheken Gson, Moshi und die offizielle Lösung von JetBrains – kotlinx.serialization.



Warum erfordert Kotlin einen besonderen Ansatz für JSON?



Kotlin ist eine statisch typisierte Sprache mit Besonderheiten wie Null-Sicherheit, data-Klassen und Standardeigenschaften. Bibliotheken für die Arbeit mit JSON müssen diese Besonderheiten berücksichtigen, damit der Code nicht nur funktioniert, sondern auch idiomatisch ist. Eine falsche Konfiguration kann zu NullPointerException oder unerwartetem Verhalten bei der Deserialisierung führen.



1. Verwendung von Gson für die Arbeit mit JSON



Gson von Google ist eine der ältesten und am weitesten verbreiteten Bibliotheken. Sie ist einfach zu verwenden, hat aber einige Besonderheiten bei der Arbeit mit Kotlin.



Abhängigkeit hinzufügen

// build.gradle.ktsimplementation("com.google.code.gson:gson:2.10.1")


Objekt in JSON serialisieren

import com.google.gson.Gson

data class User( val id: Int, val name: String, val email: String? = null)

fun main() { val user = User(1, "Ivan Petrov", "ivan@example.com") val gson = Gson() val json = gson.toJson(user) println(json) // Ausgabe: {"id":1,"name":"Ivan Petrov","email":"ivan@example.com"}}


JSON in Objekt parsen

fun parseUser(jsonString: String): User {    val gson = Gson()    return gson.fromJson(jsonString, User::class.java)}

fun main() { val json = """{"id":2,"name":"Anna Smirnova","email":null}""" val user = parseUser(json) println(user.name) // Anna Smirnova}


Wichtig: Gson verwendet Java-Reflexion und kann die Null-Sicherheit von Kotlin möglicherweise nicht berücksichtigen. Bei der Deserialisierung können als non-null deklarierte Felder den Wert null erhalten, was zu einem Laufzeitfehler führt. Es wird empfohlen, @JvmOverloads und Konstruktoren mit Standardwerten zu verwenden.



2. Moshi – moderne Alternative von Square



Moshi wurde unter Berücksichtigung der Besonderheiten von Kotlin entwickelt und bietet eine bessere Integration mit Null-Sicherheit und data-Klassen.



Abhängigkeit hinzufügen

// build.gradle.ktsimplementation("com.squareup.moshi:moshi-kotlin:1.15.0")kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")


Beispiel für die Arbeit mit Moshi

import com.squareup.moshi.Moshiimport com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

data class Product( val id: Int, val title: String, val price: Double, val inStock: Boolean = false)

fun main() { val moshi = Moshi.Builder() .addLast(KotlinJsonAdapterFactory()) .build()

val adapter = moshi.adapter(Product::class.java)

// Serialisierung val product = Product(101, "Laptop", 89999.99, true) val json = adapter.toJson(product) println(json) // {"id":101,"title":"Laptop","price":89999.99,"inStock":true}

// Deserialisierung val jsonString = """{"id":102,"title":"Maus","price":2500.00}""" val parsedProduct = adapter.fromJson(jsonString) println(parsedProduct?.title) // Maus println(parsedProduct?.inStock) // false (Standardwert)}


Moshi verarbeitet automatisch Standardwerte in data-Klassen und arbeitet korrekt mit nullable-Typen. Für eine bessere Leistung wird die Verwendung von Codegenerierung über die Annotation @JsonClass empfohlen.



3. kotlinx.serialization – offizielle Lösung von JetBrains

Blogs

Buchempfehlungen