Introduction : pourquoi Kotlin sait-il travailler avec JSON ?
\n\nJSON (JavaScript Object Notation) est un format léger d'échange de données, devenu un standard pour les applications web modernes et les API. Si vous programmez en Kotlin, que ce soit pour une application Android ou un backend, tôt ou tard vous devrez analyser des réponses JSON provenant d'un serveur ou sérialiser vos propres objets pour les envoyer.
\n\nKotlin est un langage moderne qui fonctionne sur la JVM et est entièrement compatible avec Java. Cependant, Kotlin dispose de ses propres outils puissants pour travailler avec JSON, rendant le code plus concis et plus sûr. Dans cet article, nous aborderons les deux approches les plus populaires : l'utilisation de la bibliothèque officielle kotlinx.serialization et de la bibliothèque éprouvée Gson.
\n\nCet article est destiné aux débutants. Nous commencerons par une analyse simple d'une chaîne, puis nous passerons à la création de structures imbriquées complexes, et enfin nous aborderons la sérialisation — la transformation de vos objets en JSON.
\n\n1. Préparation du projet : dépendances et imports
\n\nAvant d'écrire du code, vous devez ajouter les bibliothèques. Nous examinerons deux options.
\n\n1.1. Installation de kotlinx.serialization
\n\nC'est la solution officielle de JetBrains. Ajoutez ceci au fichier build.gradle.kts :
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 de Gson
\n\nGson est une bibliothèque de Google. Elle est plus simple à configurer, mais nécessite plus de travail manuel :
\n\ndependencies {\n implementation("com.google.code.gson:gson:2.10.1")\n}\n\n\nAprès la synchronisation du projet, vous pouvez écrire du code.
\n\n2. Analyse JSON en Kotlin avec kotlinx.serialization
\n\nCette approche est la plus « kotlinesque ». Vous déclarez des data-classes et ajoutez l'annotation @Serializable. La bibliothèque génère elle-même le code d'analyse.
2.1. Exemple simple : données utilisateur
\n\nSupposons que nous ayons une chaîne JSON :
\n\n{\n "name": "Anna",\n "age": 25,\n "email": "anna@example.com"\n}\n\n\nCréons le modèle :
\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("Nom : ${user.name}, Âge : ${user.age}")\n}\n\n\nComme vous pouvez le voir, aucun mappage manuel — tout est automatique.
\n\n2.2. Travailler avec des listes et des objets imbriqués
\n\nLes API réelles renvoient souvent des tableaux. Ajoutons un champ address :
@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": "Moscou", "street": "Tverskaïa"}},\n {"name": "Maria", "age": 22, "address": {"city": "Saint-Pétersbourg", "street": "Nevski"}}\n ]\n """.trimIndent()\n\n val users = Json.decodeFromString<List<UserWithAddress>>(jsonArray)\n users.forEach { println("${it.name} vit à ${it.address.city}") }\n}\n\n\nNotez : pour travailler avec des listes, on utilise le générique List<UserWithAddress>.
3. Analyse JSON avec Gson
\n\nGson est une bibliothèque Java classique. Elle fonctionne également très bien en Kotlin, mais nécessite un peu plus de code.
\n\n3.1. Analyse de base
\n\nimport com.google.gson.Gson\n\ndata cl