Convertitore Rust in JSON
Incolla struct Rust con derive Serialize. Ricevi JSON pulito indietro.
Cosa fa questo strumento
Se ti è mai capitato di definire una struct, piazzarci sopra #[derive(Serialize)] e renderti conto che ti serve solo il JSON senza scrivere il boilerplate di serde, aggiungere serde_json al Cargo.toml e lanciare cargo run — questo strumento fa esattamente quello. Incolla il Rust qui e ricevi JSON valido senza toccare cargo. Gestisce un singolo literal di struct, un modulo intero con più tipi o qualcosa con Vec e Option profondamente annidati — stesso risultato: un documento JSON pulito con ogni campo preservato.
Il convertitore segue come serde serializza davvero i valori. String e &str diventano stringhe JSON. i32, u64, f32, f64 diventano numeri JSON. bool diventa true/false. Vec<T>, &[T] e [T; N] diventano array JSON. HashMap<String, V> / BTreeMap<String, V> diventano oggetti JSON. Option<T> con None diventa null JSON; con Some(value) viene serializzato il tipo interno. Le tuple escono come array eterogenei — comportamento esatto documentato su serde.rs/data-model.
Gli attributi serde vengono rispettati. #[serde(rename = "x")] rinomina la chiave JSON, #[serde(skip)] rimuove il campo e #[serde(flatten)] solleva i campi della struct annidata nell'oggetto padre. I tipi enum seguono di default la rappresentazione externally-tagged (configurabile con #[serde(tag = "type")]). Incolla più struct insieme e ognuna esce come voce di primo livello. Se lavori su servizi web costruiti sulla libreria standard di Rust più axum/actix, questo output finisce dritto nei tuoi test di integrazione.
Come si usa
Tre passi. Funziona allo stesso modo sia che tu incolli una singola struct sia un modulo intero con una dozzina di tipi.
Incolla il tuo Rust (o carica l'esempio)
Butta il Rust nell'editor di sinistra così com'è. Una struct, una tuple struct, un enum con varianti, più tipi o Vec/Option/HashMap annidati — tutto ok. Clicca Carica esempio per vedere prima un caso realistico.
Non serve rimuovere use, lifetime o attributi derive. Lascia la sintassi Rust com'è — gli attributi serde fanno parte di ciò che il parser legge.
Premi Converti
Clicca il pulsante verde Converti. Lo strumento legge il Rust, preserva ogni struct e ogni campo ed emette il JSON in un colpo solo. Durante l'elaborazione appare un piccolo indicatore di caricamento.
Copia il JSON
Il pannello di destra si riempie di JSON indentato. Copialo in un test reqwest, in un test di integrazione axum, nei tuoi esempi OpenAPI o in un comando curl. Nessuna ricompilazione.
Quando torna davvero utile
Fixture per servizi web
Hai una struct di request di axum o actix e ti serve il JSON per un test o una chiamata curl. Incolli la struct, prendi il JSON, vai avanti — niente ciclo cargo.
Template di config per CLI
Una CLI basata su clap con una struct Config. Convertila in un template JSON che gli utenti possono modificare, senza scrivere una impl <code>Default</code> ad hoc solo per la documentazione.
Seed per test di integrazione
Trasforma i literal di struct dei tuoi test unitari in file JSON di seed per test di integrazione, mock server o fixture di database embedded.
Documentazione che segue il codice
Genera esempi JSON per il tuo README o la tua spec OpenAPI direttamente dai tipi Rust reali, così la documentazione smette di andare fuori sincrono.
Domande frequenti
Mi servono serde e serde_json nel mio Cargo.toml?
Per questo strumento no — gira lato server e non compila il tuo codice. Per l'uso a runtime nella tua app, serde con la feature derive più serde_json è la combinazione standard.
Rispetta #[serde(rename)], #[serde(skip)] e #[serde(flatten)]?
Sì. #[serde(rename = "x")] rinomina la chiave JSON, #[serde(skip)] toglie il campo dall'output e #[serde(flatten)] solleva i campi della struct annidata nel padre — come descritto nella documentazione degli attributi di campo di serde.
Come sono gestiti Option, Vec e HashMap?
Option<T> con None diventa null JSON; con Some(v) il valore interno viene serializzato. Vec<T>, slice e array diventano array JSON. HashMap<String, V> e BTreeMap<String, V> diventano oggetti JSON; le mappe con chiavi non-string hanno le chiavi convertite in stringa.
E gli enum con varianti?
Di default le varianti enum usano la rappresentazione externally-tagged ({ "VariantName": {...} }). Gli attributi #[serde(tag = "type")], #[serde(untagged)] e #[serde(content = "data")] passano a internally-tagged, untagged o adjacently-tagged — lo strumento legge quegli attributi e produce l'output di conseguenza.
Il mio codice viene salvato?
Il codice viene inviato al backend per la conversione e non viene conservato — non logghiamo il payload. Dai un'occhiata al codice sensibile prima di incollarlo.
E se il Rust usa lifetime o generic?
I lifetime (&'a str) vengono ignorati — JSON non ne ha il concetto. I generic concreti (Vec<User>) funzionano. I generic non istanziati escono come null. Le macro che si espandono in sintassi reale funzionano; quelle che dipendono da un crate proc-macro non visibile qui vengono trattate come opache.
Altri strumenti che potrebbero servirti
Rust in JSON è solo un pezzo del puzzle. Questi si sposano bene: