Aller au contenu
Tout en local

JSON en struct Rust

Convertissez un document JSON en structs Rust prêtes pour serde.

Entrée
Sortie

JSON en struct Rust

Collez un objet ou un tableau JSON et cet outil génère les structs Rust correspondantes, prêtes à insérer dans un projet qui utilise serde pour la sérialisation. Cela vous évite le travail fastidieux d'écrire manuellement les types de champs et les attributs derive chaque fois qu'une réponse API ou un fichier de configuration change de forme.

Les options contrôlent l'apparence du code généré. Choisissez les traits à dériver — Debug, Clone, Serialize, Deserialize, PartialEq — et si vous voulez ajouter #[serde(rename_all = "camelCase")] pour que les champs Rust idiomatiques snake_case désérialisent correctement les clés JSON camelCase. Les valeurs null peuvent devenir Option<T> automatiquement, et vous pouvez choisir i32, i64 ou u64 pour les nombres entiers et String ou un &str emprunté (avec une durée de vie) pour le texte. Les objets imbriqués peuvent être générés en tant que structs de niveau supérieur séparées ou enveloppés dans leur propre pub mod, et les champs peuvent être publics ou privés.

Les tableaux d'objets sont fusionnés en une seule struct : un champ présent seulement dans certains éléments devient Option<T> automatiquement, donc une struct générée à partir de quelques exemples correspond toujours à l'ensemble de données complet. Les noms de champs sont convertis en snake_case, les mots-clés Rust sont transformés en identifiants bruts comme r#type, et un nom qui ne peut pas être représenté correctement conserve sa clé d'origine via #[serde(rename = "...")] à la place.

Tout s'exécute localement dans votre navigateur — votre JSON n'est jamais téléchargé nulle part, il est donc sûr de coller des charges API réelles ou des données de configuration. Copiez le code généré, téléchargez-le en tant que fichier .txt, ou renvoyez le résultat à l'entrée pour l'affiner davantage.

FAQ

Est-ce que ça installe serde ou l'ajoute à Cargo.toml ?
Non. Il génère uniquement le code de struct. Ajoutez serde avec la fonctionnalité derive à votre Cargo.toml séparément : serde = { version = "1", features = ["derive"] }.
Qu'arrive-t-il à un champ qui est null dans certains enregistrements et présent dans d'autres ?
Lorsque « Envelopper les champs null dans Option<T> » est activé, ce champ devient Option<T> pour que la désérialisation fonctionne correctement qu'il soit présent, null ou manquant.
Pourquoi un champ obtient-il un attribut #[serde(rename = "...")] ?
Cela apparaît lorsque le renommage camelCase est désactivé et que la clé JSON ne correspond pas au nom de champ Rust généré snake_case, de sorte que la clé d'origine exacte est préservée pour la désérialisation.
Peut-il générer des structs à partir d'un tableau au niveau supérieur ?
Oui. Un tableau d'objets produit un alias de type comme pub type Root = Vec<Item>; plus la struct Item, en fusionnant les champs de chaque élément du tableau.
Mon JSON est-il téléchargé quelque part ?
Non. La génération de structs s'exécute entièrement dans votre navigateur — votre JSON ne quitte jamais votre appareil.