JSON vers structs Rust (serde)

Générez des structs Rust avec derives serde Serialize/Deserialize, champs en snake_case, attributs rename, Option pour les null et Vec pour les tableaux depuis du JSON.

Nécessite les crates serde (avec derive) et serde_json. Les champs sont en snake_case avec #[serde(rename)] quand la clé JSON diffère.

S'exécute entièrement dans votre navigateur. Vos données ne sont jamais envoyées.

Outils Connexes

Voir Tout

Qu'est-ce que JSON vers Rust ?

Collez du JSON et obtenez des définitions Rust struct qui le désérialisent avec serde. Chaque struct dérive Debug, Clone, Serialize, Deserialize ; les noms de champs sont en snake_case et conservent la clé d'origine avec #[serde(rename = "…")] si nécessaire.

Comment utiliser JSON vers Rust

  1. Collez un exemple JSON dans Entrée JSON (ou cliquez sur Charger un exemple / Ouvrir un fichier).
  2. Définissez le Nom du type racine (Root par défaut).
  3. Copiez le code Rust généré ou utilisez Télécharger pour l'enregistrer dans un fichier.

Exemple

Entrée
{"id":1,"name":"A","tags":["x"]}
Sortie
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub id: i64,
    pub name: String,
    pub tags: Vec<String>,
}

Quand utiliser JSON vers Rust

Utilisez-le pour écrire un client ou un CLI Rust qui lit du JSON. Affinez ensuite les types, par exemple u32 pour de petits compteurs ou des types chrono pour les horodatages, car un exemple ne peut pas révéler les vraies plages de valeurs.

Comment fonctionne JSON vers Rust

L'exemple est parcouru récursivement et chaque position collecte les types rencontrés. Les tableaux d'objets sont fusionnés en un seul type : une clé absente de certains éléments devient facultative, une clé nulle quelque part devient nullable, des entiers mêlés à des décimaux deviennent un type à virgule flottante, et tout autre mélange de types se rabat sur un type dynamique. Les objets imbriqués deviennent leurs propres types nommés (PascalCase de la clé, clés de tableau mises au singulier : orders → Order), avec des suffixes numériques en cas de collision de noms. La sortie Rust associe les entiers à i64, les décimaux à f64, les chaînes à String, les booléens à bool, les tableaux à Vec<T>, les valeurs nullables à Option<T> et les valeurs dynamiques ou uniquement nulles à serde_json::Value. Les champs absents de certains exemples deviennent Option<T> avec #[serde(default, skip_serializing_if = "Option::is_none")]. Les mots-clés comme type sont écrits en identifiants bruts (r#type).

Cas d'utilisation courants

  • Désérialiser une réponse d'API REST avec reqwest + serde
  • Modéliser un fichier de configuration JSON pour un outil CLI
  • Créer des types pour un gestionnaire de webhook
  • Convertir des jeux de test pour des tests d'intégration Rust

Questions Fréquentes

De quelles crates ai-je besoin ?

serde avec la fonctionnalité derive et serde_json : serde = { version = "1", features = ["derive"] } et serde_json = "1".

Pourquoi serde_json::Value ?

Il est utilisé quand une clé mélange des types ou est toujours null dans l'exemple : aucun type Rust concret ne peut alors être choisi en toute sécurité.

Pourquoi r#type ?

type est un mot-clé Rust ; la syntaxe d'identifiant brut permet de l'utiliser comme nom de champ tandis que serde continue de faire correspondre la clé JSON.

Explorer d'autres catégories