Introduction au travail avec JSON en Kotlin
JSON (JavaScript Object Notation) est l'un des formats les plus populaires pour l'échange de données entre le serveur et le client. Dans le développement moderne avec Kotlin, que ce soit pour des applications Android ou des projets serveur, savoir travailler efficacement avec JSON est une compétence essentielle. Dans cet article, nous allons détailler comment effectuer le parsing et la sérialisation JSON en Kotlin, en utilisant les bibliothèques les plus populaires : kotlinx.serialization et Gson.
Que vous créiez une API REST, traitiez des réponses de services externes ou sauvegardiez des paramètres locaux, comprendre les principes de travail avec JSON vous aidera à écrire un code plus propre et plus efficace.
Bases du parsing JSON en Kotlin
Qu'est-ce que la sérialisation et la désérialisation ?
Avant de passer au code, il est important de comprendre deux concepts clés :
- Sérialisation — conversion d'un objet Kotlin (data class, liste, etc.) en chaîne JSON.
- Désérialisation (parsing) — processus inverse : à partir d'une chaîne JSON, on crée un objet Kotlin.
Kotlin n'a pas de support JSON intégré, nous utilisons donc des bibliothèques tierces. Examinons les deux plus populaires.
Bibliothèque kotlinx.serialization
kotlinx.serialization est la bibliothèque officielle de JetBrains, qui s'intègre parfaitement avec le langage Kotlin. Elle fonctionne au moment de la compilation, ce qui garantit des performances élevées et la sécurité des types.
Ajout de la bibliothèque
Pour commencer, ajoutez le plugin dans build.gradle.kts :
plugins { kotlin("plugin.serialization") version "1.9.22"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Définition du modèle de données
Créons une classe pour représenter un utilisateur :
import kotlinx.serialization.Serializable
@Serializabledata class User( val name: String, val age: Int, val email: String? = null, // champ nullable val roles: List<String> = emptyList())L'annotation @Serializable indique au compilateur que cette classe peut être sérialisée.
Sérialisation (objet → JSON)
import kotlinx.serialization.encodeToStringimport kotlinx.serialization.json.Json
fun main() { val user = User( name = "Анна", age = 28, email = "anna@example.com", roles = listOf("admin", "user") )
val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Анна","age":28,"email":"anna@example.com","roles":["admin","user"]}}Désérialisation (JSON → objet)
import kotlinx.serialization.decodeFromString
fun main() { val json = """{"name":"Иван","age":35,"roles":["user"]}""" val user = Json.decodeFromString<User>(json) println(user.name) // Иван println(user.email) // null (non spécifié dans JSON)}Configuration de Json
Vous pouvez configurer le comportement du parseur :
val json = Json { prettyPrint = true // formatage joli ignoreUnknownKeys = true // ignorer les champs supplémentaires dans JSON isLenient = true // permettre un parsing non strict (ex: guillemets)}
val user = json.decodeFromString<User>(jsonString)Bibliothèque Gson
Gson de Google est une autre bibliothèque populaire, particulièrement répandue dans le développement Android.
Ajout de Gson
dependencies { implementation("com.google.code.gson:gson:2.10.1")}Exemple d'utilisation
import com.google.gson.Gson
data class Product( val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson()