Skip to content

Convertitore da JSON a struct Rust

Incolla JSON e ottieni struct serde Rust idiomatici all'istante, 100% nel browser. Tipizzazione i64/u64/f64 corretta, Option per i null, #[serde(rename)] per il camelCase. Gratis.

Niente tracciamento Funziona nel browser Gratuito
Opzioni
0 caratteri
Output Rust
0 righe
Output verificato rispetto alla semantica di serde e alla formattazione rustfmt su payload API reali. — Go Tools Team · Jul 2, 2026

Cos'è la conversione da JSON a Rust?

La conversione da JSON a Rust trasforma un campione JSON in struct Rust pronti da compilare con le macro #[derive(Serialize, Deserialize)] di serde, così non scrivi mai a mano il boilerplate di deserializzazione per le risposte API o i file di configurazione. Questo generatore rapido di struct Rust deduce i tipi numerici corretti, contrassegna i campi assenti come Option e aggiunge #[serde(rename)] per le chiavi non in snake_case — tutto al 100% nel tuo browser.

Esempi

Risposta API

{"id":101,"name":"Ada Lovelace","email":"ada@example.com","active":true,"roles":["admin","user"]}
use serde::{Deserialize, Serialize};

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

Un tipico payload REST diventa uno struct pronto per serde da inserire nel tuo client. I numeri vengono dedotti come i64, gli array diventano Vec<String>.

Oggetto annidato

{"repo":"serde","owner":{"login":"dtolnay","id":100}}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub repo: String,
    pub owner: Owner,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Owner {
    pub login: String,
    pub id: i64,
}

Gli oggetti annidati diventano struct separati e con nome (Owner) referenziati per campo — le forme identiche vengono deduplicate.

Array di oggetti (campo opzionale)

{"users":[{"id":1,"nick":"x"},{"id":2}]}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub users: Vec<User>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    pub id: i64,
    pub nick: Option<String>,
}

Gli array di oggetti si uniscono in un unico struct per l'elemento. Le chiavi assenti in alcuni elementi diventano Option<String> — senza bisogno di #[serde(default)].

Chiavi in camelCase

{"login":"octocat","publicRepos":15,"followerCount":9001,"createdAt":"2011-01-25"}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub login: String,
    #[serde(rename = "publicRepos")]
    pub public_repos: i64,
    #[serde(rename = "followerCount")]
    pub follower_count: i64,
    #[serde(rename = "createdAt")]
    pub created_at: String,
}

I campi diventano snake_case con #[serde(rename)] che rimanda alla chiave JSON originale. Le chiavi già in snake_case come login non ricevono rename.

Come convertire JSON in Rust

  1. 1

    Incolla il tuo JSON

    Inserisci un oggetto JSON, un array o una risposta API nel campo di input. La conversione parte istantaneamente.

  2. 2

    Regola l'output

    Rinomina lo struct radice e attiva le derivazioni serde, Debug e Clone, o la visibilità pub per adattarlo allo stile del tuo crate.

  3. 3

    Copia o scarica

    Prendi il Rust generato con un clic e incollalo direttamente nel tuo progetto.

Common Use Cases

Client API tipizzati
Trasforma una risposta di esempio REST o GraphQL in struct serde per un client reqwest o simile senza scrivere a mano il boilerplate di deserializzazione.
Parsing di configurazioni e fixture
Genera struct per file di configurazione JSON, fixture di test o payload di webhook che devi deserializzare con serde_json.
Prototipazione rapida
Incolla un payload sconosciuto per vedere all'istante la sua forma come tipi Rust — un modo rapido per esplorare una nuova API prima di collegarla.

Come funziona la conversione

Inferenza strutturale
Ogni oggetto diventa uno struct con nome; le forme identiche vengono deduplicate così ottieni un solo struct, non copie. Gli array di oggetti vengono uniti chiave per chiave, e le chiavi assenti in alcuni elementi diventano Option<T>.
Tipizzazione numerica corretta
Gli interi diventano i64, passano a u64 oltre i64::MAX, e ripiegano su f64 oltre u64. I valori in virgola mobile vengono rilevati dal token (1.0, 2e3) così la deserializzazione serde non fallisce mai per un float in un campo intero.
Identificatori idiomatici e compilabili
Le chiavi diventano campi snake_case con #[serde(rename)] che rimanda alla chiave originale; le parole chiave di Rust, i nomi duplicati e le chiavi non identificatori vengono ripulite così l'output compila sempre.
100% lato client
Il parsing e la generazione girano nel tuo browser senza chiamate di rete, così i tuoi dati restano privati.

Consigli per struct Rust puliti

Dai un nome allo struct radice
Imposta un nome radice significativo (ad esempio User, ApiResponse) invece del Root predefinito per un codice leggibile.
Aggiungi serde_json solo quando serve
serde_json::Value compare per array vuoti o di tipi misti e campi solo null. Assegna a quei campi un tipo concreto da un campione più ricco se puoi, oppure aggiungi serde_json a Cargo.toml.
Rivedi Option rispetto a obbligatorio
I campi vengono contrassegnati come Option<T> solo quando un campione li omette. Incolla un payload rappresentativo così lo strumento deduce con precisione i campi obbligatori e opzionali.

Domande frequenti

Come converto JSON in uno struct Rust?
Incolla il tuo JSON nel campo di input. Il convertitore lo analizza istantaneamente nel browser e genera sulla destra struct Rust con le derivazioni serde. Clicca Copia per prendere il risultato — nessun upload, nessun account, nessuna attesa.
Genera le derivazioni serde? Mi servono serde e serde_json?
Sì — l'output usa #[derive(Debug, Clone, Serialize, Deserialize)] per impostazione predefinita. Aggiungi serde con la feature derive al tuo Cargo.toml. Ti serve serde_json come dipendenza solo se l'output contiene serde_json::Value, che compare per array vuoti o misti e campi solo null. Disattiva l'opzione serde per emettere struct semplici.
Come uso lo struct generato per analizzare JSON?
Aggiungi serde_json al tuo Cargo.toml, poi deserializza in una riga: let root: Root = serde_json::from_str(json)?;. La derivazione Deserialize generata fa il resto — usa serde_json::from_slice per uno slice di byte o from_reader per un file o un corpo HTTP, e serde_json::to_string per riserializzare.
Come vengono gestiti i campi opzionali e null?
Quando una chiave compare in alcuni elementi di un array ma non in altri, diventa un campo Option. Un campo che è sempre null diventa un serde_json::Value opzionale. serde tratta Option come opzionale automaticamente, quindi non viene aggiunto né richiesto alcun attributo #[serde(default)].
Come gestisce le chiavi camelCase e le parole chiave di Rust?
I nomi dei campi vengono convertiti in snake_case idiomatico, e un attributo #[serde(rename)] li rimanda alla chiave JSON esatta. Le parole chiave riservate come type o match vengono emesse come type_ o match_ con un rename, il che è più robusto degli identificatori grezzi perché copre anche self, crate e super.
Può usare #[serde(rename_all)] al posto dei rename per campo?
Lo strumento emette un #[serde(rename)] per ogni campo perché funziona sempre — anche quando un payload mescola camelCase, snake_case e chiavi irregolari. Se tutti i campi di uno struct condividono un'unica convenzione, elimina quegli attributi e metti invece un unico #[serde(rename_all = "camelCase")] sullo struct; entrambi deserializzano in modo identico.
Quale tipo numerico di Rust utilizza?
Gli interi diventano i64, oppure u64 quando un valore supera i64::MAX, e ripiegano su f64 oltre u64 — così gli ID grandi restano fedeli. Qualsiasi numero scritto con la virgola decimale o un esponente (come 1.0 o 2e3) diventa f64, perché serde rifiuterebbe un valore in virgola mobile in un campo intero.
Come vengono tipizzate date e timestamp?
JSON non ha un tipo data, quindi le stringhe ISO come 2011-01-25 o i timestamp RFC 3339 escono come String. Per una vera gestione delle date, cambia il campo in un tipo chrono — DateTime nel fuso orario Utc, oppure NaiveDate — e abilita la feature serde di chrono. serde analizza quindi RFC 3339 automaticamente.
Come gestisco oggetti con chiavi dinamiche o sconosciute?
Quando le chiavi variano — ad esempio una mappa da ID a valori — sostituisci lo struct generato con una HashMap indicizzata da String. Per mantenere uno struct tipizzato ma catturare comunque i campi extra, aggiungi un campo #[serde(flatten)] che sia una HashMap. Per valori completamente dinamici, serde_json::Value è il tipo jolly.
I miei dati JSON sono privati e al sicuro?
Sì. La conversione avviene al 100% nel tuo browser con JavaScript. Il tuo JSON — inclusi token, ID o dati dei clienti — non lascia mai la pagina e non viene mai inviato a un server.
Posso generare struct Rust semplici senza serde?
Sì. Disattiva l'opzione serde per rimuovere la riga use serde, le derivazioni Serialize e Deserialize e tutti gli attributi #[serde(rename)] — lasciando struct puliti. Puoi anche attivare o meno le derivazioni Debug e Clone e la visibilità pub.
Lo strumento è gratuito? Serve un account?
È completamente gratuito, senza registrazione, senza limiti e senza pubblicità che ingombra lo spazio di lavoro.

Strumenti correlati

Vedi tutti gli strumenti →