Convertitore da JSON a strutture Rust Serde — Numio
Genera strutture Rust con serde Serialize e Deserialize deriva da un campione JSON. I campi diventano snake_case con un attributo rename_all, le chiavi mancanti in alcuni elementi dell'array diventano Option<T> e i valori null diventano serde_json::Value.
Digitare una risposta API di terze parti prima di deserializzarla con serde_json in un client reqwest.
JSON
Rust Serde
Quando usarlo
- Digitare una risposta API di terze parti prima di deserializzarla con serde_json in un client reqwest.
- Scrittura di strutture per un file di configurazione o di dispositivo JSON in un servizio Rust CLI o Axum.
Come si usa
- Incolla il campione JSON; se un campo è facoltativo, includi gli elementi dell'array sia con che senza di esso.
- Apri le impostazioni e scegli Formato nome proprietà in modo che corrisponda alle chiavi nel tuo JSON (camelCase predefinito). Imposta #[serde(rename_all = ...)]; le chiavi che non si adattano ottengono #[serde(rename = ...)].
- Copia il codice e aggiungi serde (con derive), serde_derive e serde_json a Cargo.toml, come previsto dalle righe di utilizzo generate.
Ingresso JSON
{
"orderId": "A-1001",
"total": 19.5,
"paid": true,
"coupon": null,
"items": [
{ "sku": "PEN-01", "qty": 2 },
{ "sku": "BOOK-7", "qty": 1, "giftWrap": true }
]
}Strutture di ruggine (serde)
use serde_derive::Deserialize;
use serde_derive::Serialize;
use serde_json::Value;
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Root {
pub order_id: String,
pub total: f64,
pub paid: bool,
pub coupon: Value,
pub items: Vec<Item>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Item {
pub sku: String,
pub qty: i64,
pub gift_wrap: Option<bool>,
}Dettagli e limiti
La generazione viene eseguita nel tuo browser con il modulo json_typegen WebAssembly; nulla viene inviato a un server.
Gli interi diventano i64, i decimali f64. gli array nulli e vuoti danno serde_json::Value e Vec<Value>; sostituirli con tipi concreti come Option<String>.
Le parole chiave di Rust vengono rinominate: una chiave denominata type diventa type_field con #[serde(rename = "type")].
Ogni struttura deriva Default, Debug, Clone e PartialEq oltre a Serialize e Deserialize; rimuovi quelli che non ti servono.
FAQ
Cosa cambia l'impostazione Formato nome proprietà?
Descrive come sono scritte le chiavi nel tuo JSON, non i nomi dei campi Rust. I campi sono sempre snake_case; l'impostazione seleziona il valore rename_all in modo che serde li ricolleghi a camelCase, kebab-case, PascalCase e così via.
Come vengono rilevati i campi facoltativi?
Quando gli oggetti nello stesso array hanno chiavi diverse, le chiavi mancanti in alcuni elementi diventano Option<T>. Un campo presente in ogni articolo del campione non è opzionale, anche se il tuo API a volte lo omette.
La radice di JSON può essere un array?
Sì. Un array alla radice produce pub type Root = Vec<Root2>; con una struct Root2 per gli elementi.