UTILS.
100% nel browser
🦀

Da JSON a struct Rust Serde

Genera struct Rust con derive serde da un JSON di esempio, pronti per Serialize/Deserialize, con Option per i campi nullable e attributi rename.

output

Informazioni su questo strumento

Lo strumento Da JSON a struct Rust Serde converte un JSON di esempio incollato in struct Rust annotati per serde, così puoi deserializzare lo stesso payload senza scrivere a mano ogni campo. Analizza il JSON, inferisce i tipi Rust ricorsivamente ed emette una struct #[derive(Serialize, Deserialize, ...)] per oggetto: le stringhe diventano String, gli interi i64 (o u64 quando tutti i campioni sono non negativi), gli altri numeri f64, i booleani bool, gli array Vec<T> e gli oggetti annidati le proprie struct PascalCase definite prima dei loro genitori.

Tutto il lavoro avviene localmente nel tuo browser con JSON.parse e semplice JavaScript — nulla viene caricato. I campi delle struct vengono convertiti in snake_case, e ogni volta che una chiave JSON differisce dal campo snake_case lo strumento aggiunge #[serde(rename = "originalKey")] così la struct mappa comunque il formato del payload. Le chiavi assenti in alcuni campioni fratelli, o viste come null, diventano Option<T> con #[serde(default)] così la deserializzazione tollera la loro assenza. Gli array vuoti ripiegano su Vec<serde_json::Value>.

L'interruttore della larghezza degli interi passa tra 64 bit (i64/u64, predefinito) e 32 bit (i32/u32), promuovendo automaticamente a 64 bit quando un valore campionato supera l'intervallo a 32 bit. L'interruttore dei derive sceglie tra l'insieme completo (Serialize, Deserialize, Debug, Clone) e un minimale Serialize, Deserialize. Il file inizia con use serde::{Serialize, Deserialize};. Copialo o scarica un file .rs.

Domande frequenti

Come vengono mappati i tipi JSON su Rust?
string in String, intero in i64 (o u64 quando ogni campione è non negativo), numero non intero in f64, booleano in bool, array in Vec<T> e oggetto in una struct nominata con derive serde. I campi null o mancanti diventano Option<T> con #[serde(default)].
Quando viene aggiunto #[serde(rename)]?
Ogni volta che la chiave JSON non è uguale al nome del suo campo snake_case — per esempio una chiave userName produce il campo user_name con #[serde(rename = "userName")], così la struct deserializza comunque esattamente il JSON originale.
Posso scegliere la larghezza degli interi?
Sì. L'interruttore della larghezza emette interi a 64 bit (i64/u64) o a 32 bit (i32/u32). Il segno segue i dati: i campioni tutti non negativi usano il tipo unsigned. I valori oltre l'intervallo a 32 bit vengono promossi automaticamente a 64 bit.
Quali derive sono inclusi?
Il predefinito è #[derive(Serialize, Deserialize, Debug, Clone)]; l'opzione minimale emette solo Serialize, Deserialize. Le struct figlie vengono dichiarate prima dei genitori che le referenziano così il modulo compila così com'è.

Altri strumenti