Vai al contenuto

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

  1. Incolla il campione JSON; se un campo è facoltativo, includi gli elementi dell'array sia con che senza di esso.
  2. 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 = ...)].
  3. 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.

Specifiche e riferimenti