Einleitung: Warum sollte Kotlin mit JSON arbeiten können?
\n\nJSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat, das zum Standard für moderne Webanwendungen und APIs geworden ist. Wenn Sie in Kotlin programmieren, sei es für eine Android-App oder ein Backend, werden Sie früher oder später JSON-Antworten von einem Server parsen oder Ihre eigenen Objekte zum Senden serialisieren müssen.
\n\nKotlin ist eine moderne Sprache, die auf der JVM läuft und vollständig mit Java kompatibel ist. Kotlin bietet jedoch eigene leistungsstarke Werkzeuge für die Arbeit mit JSON, die den Code prägnanter und sicherer machen. In diesem Artikel behandeln wir die beiden gängigsten Ansätze: die Verwendung der offiziellen Bibliothek kotlinx.serialization und des bewährten Gson.
\n\nDer Artikel richtet sich an Anfänger. Wir beginnen mit dem einfachen Parsen eines Strings, gehen dann zur Erstellung komplexer verschachtelter Strukturen über und behandeln am Ende die Serialisierung – die Umwandlung Ihrer Objekte zurück in JSON.
\n\n1. Projektvorbereitung: Abhängigkeiten und Importe
\n\nBevor wir Code schreiben, müssen wir die Bibliotheken hinzufügen. Wir betrachten zwei Varianten.
\n\n1.1. Installation von kotlinx.serialization
\n\nDies ist die offizielle Lösung von JetBrains. Fügen Sie Folgendes in Ihre Datei build.gradle.kts ein:
plugins {\n kotlin("jvm") version "1.9.0"\n kotlin("plugin.serialization") version "1.9.0"\n}\n\ndependencies {\n implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")\n}\n\n\n1.2. Installation von Gson
\n\nGson ist eine Bibliothek von Google. Sie ist einfacher einzurichten, erfordert aber mehr manuelle Arbeit:
\n\ndependencies {\n implementation("com.google.code.gson:gson:2.10.1")\n}\n\n\nNach der Synchronisierung des Projekts kann der Code geschrieben werden.
\n\n2. JSON-Parsing in Kotlin mit kotlinx.serialization
\n\nDieser Ansatz ist der „kotlinischste". Sie deklarieren data-Klassen und fügen die Annotation @Serializable hinzu. Die Bibliothek generiert selbstständig den Code für das Parsing.
2.1. Einfaches Beispiel: Benutzerdaten
\n\nAngenommen, wir haben einen JSON-String:
\n\n{\n "name": "Anna",\n "age": 25,\n "email": "anna@example.com"\n}\n\n\nWir erstellen das Modell:
\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n val name: String,\n val age: Int,\n val email: String\n)\n\nfun main() {\n val jsonString = """\n {\n "name": "Anna",\n "age": 25,\n "email": "anna@example.com"\n }\n """.trimIndent()\n\n val user = Json.decodeFromString<User>(jsonString)\n println("Name: ${user.name}, Alter: ${user.age}")\n}\n\n\nWie Sie sehen, kein manuelles Mapping – alles automatisch.
\n\n2.2. Arbeiten mit Listen und verschachtelten Objekten
\n\nEchte APIs geben oft Arrays zurück. Fügen wir ein Feld address hinzu:
@Serializable\ndata class Address(\n val city: String,\n val street: String\n)\n\n@Serializable\ndata class UserWithAddress(\n val name: String,\n val age: Int,\n val address: Address\n)\n\nfun main() {\n val jsonArray = """\n [\n {"name": "Ivan", "age": 30, "address": {"city": "Moskau", "street": "Twerskaja"}},\n {"name": "Maria", "age": 22, "address": {"city": "SPb", "street": "Newski"}}\n ]\n """.trimIndent()\n\n val users = Json.decodeFromString<List<UserWithAddress>>(jsonArray)\n users.forEach { println("${it.name} wohnt in ${it.address.city}") }\n}\n\n\nBeachten Sie: Für die Arbeit mit Listen wird der generische Typ List<UserWithAddress> verwendet.
3. JSON-Parsing mit Gson
\n\nGson ist eine klassische Java-Bibliothek. Sie funktioniert auch in Kotlin hervorragend, erfordert aber etwas mehr Code.
\n\n3.1. Basis-Parsing
\n\nimport com.google.gson.Gson\n\ndata cl