Introduction : pourquoi JSON est la base du développeur Kotlin moderne
\nJSON (JavaScript Object Notation) reste le standard de facto pour l'échange de données entre le serveur et le client, que ce soit une application mobile Android ou un backend avec Ktor. Dans l'écosystème Kotlin, le travail avec JSON est particulièrement pratique grâce au typage strict du langage et aux puissantes bibliothèques de sérialisation. Dans cet article, nous aborderons deux approches principales : l'utilisation de la bibliothèque officielle kotlinx.serialization et de la populaire Gson. Vous apprendrez à parser des structures complexes, à sérialiser des objets et à gérer les exceptions en pratique.
Préparation du projet et ajout des dépendances
\nAvant d'écrire du code, il est nécessaire d'ajouter les bibliothèques dans le fichier build.gradle.kts (pour Gradle). Examinons les deux options.
Option 1 : kotlinx.serialization (recommandée)
\n- \n
- Ajoutez le plugin dans
plugins:kotlin("plugin.serialization") version "1.9.22"\n - Dans
dependencies, indiquez :implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")\n
Option 2 : Gson (pour la compatibilité avec les projets Java)
\n- \n
- Dans
dependencies, ajoutez :implementation("com.google.code.gson:gson:2.10.1")\n
// build.gradle.kts — exemple complet pour kotlinx.serialization\nplugins {\n kotlin("jvm") version "1.9.22"\n kotlin("plugin.serialization") version "1.9.22"\n}\n\ndependencies {\n implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")\n}\n\nParsing JSON en Kotlin : du simple au complexe
\nLe parsing (désérialisation) est la conversion d'une chaîne JSON en un objet Kotlin. Prenons l'exemple des données d'un utilisateur.
\n\nExemple de données
\n{\n "id": 123,\n "name": "Анна",\n "email": "anna@example.com",\n "active": true\n}\n\nCréation de la Data Class
\nPour les deux bibliothèques, on utilise la même classe. Important : pour kotlinx.serialization, il faut ajouter l'annotation @Serializable.
import kotlinx.serialization.Serializable\n\n@Serializable\ndata class User(\n val id: Int,\n val name: String,\n val email: String,\n val active: Boolean\n)\n\nParsing avec kotlinx.serialization
\nimport kotlinx.serialization.json.Json\n\nfun parseWithKotlinx(jsonString: String): User {\n val json = Json { ignoreUnknownKeys = true } // ignorer les champs inconnus\n return json.decodeFromString<User>(jsonString)\n}\n\n// Utilisation :\nfun main() {\n val json = """{"id":123,"name":"Анна","email":"anna@example.com","active":true}"""\n val user = parseWithKotlinx(json)\n println(user.name) // Анна\n}\n\nParsing avec Gson
\nimport com.google.gson.Gson\n\nfun parseWithGson(jsonString: String): User {\n val gson = Gson()\n return gson.fromJson(jsonString, User::class.java)\n}\n\n// Utilisation :\nfun main() {\n val json = """{"id":123,"name":"Анна","email":"anna@example.com","active":true}"""\n val user = parseWithGson(json)\n println(user.email) // anna@example.com\n}\n\nSérialisation : transformer un objet en JSON
\nLe processus inverse — créer une chaîne JSON à partir d'un objet — est tout aussi important pour envoyer des données au serveur.
\n\nSérialisation avec kotlinx.serialization
\nimport kotlinx.serialization.encodeToString\n\nfun serializeWithKotlinx(user: User): String {\n val json = Json { prettyPrint = true }\n return json.encodeToString(user)\n}\n\n// Résultat :\n// {\n// "id": 123,\n// "name": "Анна",\n// "email": "anna@example.com",\n// "active": true\n// }\n\nSérialisation avec Gson
\nfun serializeWithGson(user: User): String {\n val gson = GsonBuilder().setPrettyPrinting().create()\n return gson.toJson(user)\n}<