araç köşesi

Générer des classes et structs à partir de JSON (7 langages)

Transformez un exemple JSON en dataclass Python, record C#, struct Go, data class Kotlin, struct Rust (serde), Swift Codable ou classe Dart

Vos données restent chez vous. La conversion se fait dans le navigateur ; rien n'est envoyé à un serveur.

Comment ça marche

Pour manipuler la réponse d'une API sous forme d'objets typés, il faut d'abord écrire les types correspondant à son JSON ; recopier à la main une réponse imbriquée de vingt champs prend du temps et laisse passer des fautes de frappe. Collez un exemple de réponse dans le panneau de gauche, choisissez le langage dans la liste et saisissez un nom de type racine comme Commande ; le code apparaît aussitôt à droite. Dans l'exemple, l'objet « livraison » devient un type à part (Livraison) et le tableau « articles » une liste d'Article, le singulier du nom du tableau. Toutes les entrées d'un tableau sont fusionnées en un seul type : le second article n'a pas de remise, ce champ devient donc float | None en Python, double? en C#, *float64 en Go et Option<f64> en Rust. Le caractère entier ou décimal d'un nombre est lu dans son écriture : 459.5 reste décimal, 1024 reste entier. Une clé comme « nom_client » est renommée selon la règle du langage (NomClient en Go, nomClient en Kotlin) et le nom d'origine est gardé dans une balise ou une annotation pour que la bibliothèque JSON le retrouve.

Cet outil est aussi connu sous le nom de convertir json en classe python, json en classe c#, json en struct go, json to python, json to kotlin data class, json to rust, json to swift, json to dart.

Qu'est-ce que Classe de données (data class, record, struct) ?

Une classe de données est un type écrit pour transporter des données plutôt qu'un comportement : ses champs et leurs types sont déclarés, le compilateur ou une bibliothèque se charge du reste. La @dataclass de Python, le record de C#, la data class de Kotlin et les structs de Go, Rust et Swift jouent ce rôle. Projeter une réponse JSON sur ces types révèle les noms de champs mal orthographiés et les confusions de types dès l'écriture du code, pas à l'exécution.

Qu'est-ce que Sérialisation ?

La sérialisation transforme un objet de votre programme en texte transportable comme le JSON ; la désérialisation reconstruit l'objet à partir de ce texte. Chaque langage a sa bibliothèque : System.Text.Json, encoding/json, serde, Codable, kotlinx.serialization. Elles associent les noms de champs aux clés JSON ; quand les noms diffèrent, les balises et annotations ajoutées par cette page indiquent quelle clé va dans quel champ.

Quelle différence entre JSON Schema et les types d'un langage ?

Les types d'un langage (dataclass, struct, record) servent à lire du JSON dans un seul programme : le compilateur ou l'exécution vérifie noms et types de champs, mais seulement dans ce langage. JSON Schema est un contrat indépendant du langage : il vérifie avec les mêmes règles, dans tous les langages, qu'un document JSON est valide, et figure souvent dans la documentation des API. Si votre propre code lit les données, prenez les types de cette page ; si vous écrivez des règles communes à plusieurs équipes et langages, JSON Schema convient mieux.

Ce que produit chaque langage et la bibliothèque requise

Chaque langage suit l'usage de sa communauté, pour que le code entre dans un projet sans retouche. Python utilise @dataclass de la bibliothèque standard, plus une méthode de classe from_dict qui construit aussi les objets imbriqués, car une dataclass ne sait pas se créer depuis un dict. En C#, la sortie est un record positionnel pour System.Text.Json, intégré à .NET. En Go, les champs commencent par une majuscule pour être exportés et la balise json:"..." porte la clé d'origine ; les abréviations id, url et api s'écrivent ID, URL et API selon l'usage de Go.

Kotlin demande le plugin kotlinx.serialization, Rust les crates serde et serde_json (serde avec la fonctionnalité derive dans Cargo.toml). Swift se contente de Codable. En Dart, la sortie est une paire fromJson/toJson écrite à la main, utilisable dans Flutter sans paquet supplémentaire ni générateur comme json_serializable.

  • Python 3.7+ : @dataclass + from_dict, champ optionnel float | None = None
  • C# 9+ : public record Commande(...) + [property: JsonPropertyName("numCommande")]
  • Go 1.18+ : *float64 + json:"remise,omitempty"
  • Kotlin : @Serializable data class, @SerialName("nom_client")
  • Rust : #[derive(Serialize, Deserialize)], Option<f64>, #[serde(rename)]
  • Swift 5 : struct Commande: Codable + enum CodingKeys
  • Dart 3 / Flutter : champs final, factory fromJson, toJson

Pièges : un seul exemple, null et types mélangés

Les types sont déduits uniquement de l'exemple collé. Un champ jamais null dans l'exemple mais null en production fera échouer votre code à ce moment-là ; collez donc de préférence un tableau de plusieurs enregistrements : à la fusion, les champs absents ou null dans certains deviennent optionnels d'eux-mêmes. Un champ toujours null n'a pas de type connu et se replie sur un type capable de contenir n'importe quelle valeur JSON (Any en Python, JsonElement en C#, serde_json::Value en Rust, un enum JSONValue ajouté à la sortie Swift).

Si un champ est un nombre dans un enregistrement et du texte dans un autre, le même type fourre-tout est utilisé ; le type des éléments d'un tableau vide reste lui aussi inconnu. Les dates (2026-09-27) et les petits ensembles de valeurs ne deviennent ni types date ni enums : ils restent des chaînes, à vous de les préciser. Les mots réservés comme class, type ou self ne peuvent pas servir de nom de champ : Python écrit class_, Kotlin et Swift utilisent des accents graves, Rust écrit r#type ; le nom JSON d'origine reste dans la balise.

Questions fréquentes

Comment convertir du JSON en classe Python ?

Collez l'exemple JSON à gauche, choisissez Python et saisissez le nom du type racine. À droite apparaît une @dataclass pour chaque objet imbriqué, avec une méthode from_dict qui construit l'objet depuis un dict JSON. Lisez vos données avec json.loads puis passez-les à Commande.from_dict(...).

Pourquoi les champs d'une struct Go commencent-ils par une majuscule ?

En Go, seuls les champs qui commencent par une majuscule sont exportés, et encoding/json ne remplit que ceux-là. La clé nom_client devient donc le champ NomClient, et la balise json:"nom_client" garantit la bonne correspondance au décodage.

Pourquoi certains champs sont-ils Optional, ? ou Option ?

Ce champ manque dans certains enregistrements du tableau, ou il valait null dans le JSON. Si le langage ignore qu'une valeur peut être vide, le décodage échoue. Si vous êtes sûr que chaque champ est toujours présent, réglez l'option sur Obligatoires ; les champs réellement null restent optionnels.

Le JSON collé est-il envoyé à un serveur ?

Non. La déduction des types et l'écriture du code se font entièrement dans votre navigateur ; même une réponse contenant des données clients ou des clés d'accès ne quitte pas cette page. Une fois chargée, la page fonctionne aussi hors connexion.