Introduction : pourquoi le JSON en Kotlin est à la fois une douleur et une joie
\nSi vous avez déjà développé pour Android ou un backend en Kotlin, vous avez très probablement rencontré le JSON. C'est comme l'air pour un développeur moderne : API, configurations, bases de données – tout parle ce langage. Mais voici le paradoxe : la question "How to parse JSON in Kotlin?" sur Stack Overflow recueille des milliers de vues chaque mois. Pourquoi ? Parce qu'en Kotlin, contrairement à Java, il y a la null safety, et les anciennes bibliothèques comme Gson commencent à "dérailler".
\nDans ce tutoriel, nous allons aborder le parsing JSON en Kotlin du simple au complexe. Vous apprendrez à travailler avec Kotlinx Serialization, Moshi et le classique Gson. Nous écrirons du code réel que vous pourrez copier directement dans votre projet. C'est parti !
\n\n\n\n
Qu'est-ce que le JSON et pourquoi Kotlin ne s'entend pas immédiatement avec lui ?
\nJSON (JavaScript Object Notation) est un format textuel d'échange de données. Il ressemble à ceci :
\n{\n "name": "Kotlin",\n "year": 2011,\n "features": ["null safety", "coroutines"]\n}\nOn pourrait penser que rien ne peut mal tourner ? Mais Kotlin a un typage strict et la null safety. Lorsque vous parsez du JSON, vous devez indiquer explicitement quels champs peuvent être null et lesquels sont obligatoires. Si la bibliothèque ne tient pas compte de cela, vous obtiendrez une NullPointerException ou des bugs étranges.
C'est pourquoi le choix de la bonne bibliothèque pour le parsing JSON en Kotlin n'est pas simplement une "librairie au goût", mais une question de stabilité du projet.
\n\nTop 3 des bibliothèques pour le parsing JSON en Kotlin
\nNous allons examiner trois approches principales. Chacune a ses avantages et ses inconvénients.
\n- \n
- Kotlinx Serialization – la bibliothèque officielle de JetBrains. La meilleure intégration avec le langage. \n
- Moshi – une bibliothèque moderne de Square. Fonctionne à la fois avec Java et Kotlin. \n
- Gson – le bon vieux standard. Toujours populaire, mais nécessite de la prudence avec Kotlin. \n
1. Kotlinx Serialization – le choix des pros
\nC'est la bibliothèque native pour Kotlin. Elle utilise la génération de code et prend entièrement en charge la null safety. Si vous écrivez un nouveau projet en Kotlin, c'est votre choix.
\nInstallation : Ajoutez le plugin dans build.gradle.kts :
plugins {\n kotlin("plugin.serialization") version "1.9.0"\n}\n\ndependencies {\n implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")\n}\nExemple de code :
\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n val name: String,\n val year: Int,\n val features: List<String>\n)\n\nfun main() {\n val jsonString = """\n {\n "name": "Kotlin",\n "year": 2011,\n "features": ["null safety", "coroutines"]\n }\n """.trimIndent()\n\n val user = Json.decodeFromString<User>(jsonString)\n println(user.name) // Kotlin\n println(user.features[0]) // null safety\n}\nNotez que Kotlinx Serialization détecte automatiquement les types. Si un champ est absent du JSON et qu'il n'est pas marqué comme nullable dans le data class, vous obtiendrez une exception. C'est une bonne chose – vous ne manquerez pas l'erreur.
2. Moshi – flexible et rapide
\nMoshi est une bibliothèque de Square, créée en tenant compte de Kotlin. Elle prend également en charge la génération de code et la null safety. Contrairement à Gson, Moshi n'utilise pas la réflexion par défaut, ce qui la rend plus rapide.
\nInstallation :
\ndependencies {\n implementation("com.squareup.moshi:moshi-kotlin:1.15.0")\n ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")\n}\nExemple de code :
\nim