Travailler avec JSON en Kotlin : parsing et sérialisation en pratique

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi JSON est la base du développeur Kotlin moderne

\n

JSON (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.

\n\n

Préparation du projet et ajout des dépendances

\n

Avant 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.

\n\n

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
\n\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
\n\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\n

Parsing JSON en Kotlin : du simple au complexe

\n

Le 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\n

Exemple de données

\n
{\n  "id": 123,\n  "name": "Анна",\n  "email": "anna@example.com",\n  "active": true\n}
\n\n

Création de la Data Class

\n

Pour les deux bibliothèques, on utilise la même classe. Important : pour kotlinx.serialization, il faut ajouter l'annotation @Serializable.

\n
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\n

Parsing avec kotlinx.serialization

\n
import 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\n

Parsing avec Gson

\n
import 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\n

Sérialisation : transformer un objet en JSON

\n

Le processus inverse — créer une chaîne JSON à partir d'un objet — est tout aussi important pour envoyer des données au serveur.

\n\n

Sérialisation avec kotlinx.serialization

\n
import 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\n

Sérialisation avec Gson

\n
fun serializeWithGson(user: User): String {\n    val gson = GsonBuilder().setPrettyPrinting().create()\n    return gson.toJson(user)\n}<                

Blogs

Book Recommendations