Konwerter JSON na struktury Rust Serde — Numio
Generuje struktury Rust za pomocą serde Serialize i Deserialize pochodzą z próbki JSON. Pola stają się snake_case z atrybutem rename_all, brakujące klucze w niektórych elementach tablicy stają się Option<T>, a wartości null stają się serde_json::Value.
Wpisanie odpowiedzi API innej firmy przed deserializacją za pomocą serde_json w kliencie reqwest.
JSON
Rust Serde
Kiedy go używać
- Wpisanie odpowiedzi API innej firmy przed deserializacją za pomocą serde_json w kliencie reqwest.
- Pisanie struktur dla pliku konfiguracyjnego lub urządzenia JSON w usłudze Rust CLI lub Axum.
Jak używać
- Wklej próbkę JSON; jeśli pole jest opcjonalne, uwzględnij elementy tablicy zarówno z nim, jak i bez niego.
- Otwórz ustawienia i wybierz Format nazwy właściwości, aby dopasować klawisze w JSON (domyślnie camelCase). Ustawia #[serde(rename_all = ...)]; klucze, które nie pasują, otrzymują #[serde(rename = ...)].
- Skopiuj kod i dodaj serde (z pochodną), serde_derive i serde_json do pliku Cargo.toml, zgodnie z oczekiwaniami wygenerowanych linii użycia.
Wejście JSON
{
"orderId": "A-1001",
"total": 19.5,
"paid": true,
"coupon": null,
"items": [
{ "sku": "PEN-01", "qty": 2 },
{ "sku": "BOOK-7", "qty": 1, "giftWrap": true }
]
}Struktury rdzy (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>,
}Szczegóły i ograniczenia
Generacja działa w Twojej przeglądarce z modułem json_typegen WebAssembly; nic nie jest wysyłane na serwer.
Liczby całkowite stają się i64, a dziesiętne f64. null i puste tablice dają serde_json::Value i Vec<Value>; zastąp je konkretnymi typami, np. Option<String>.
Zmieniono nazwy słów kluczowych Rust: klucz o nazwie type zmienia się na type_field z #[serde(rename = "type")].
Każda struktura wyprowadza wartości domyślne, debugowanie, klonowanie i PartialEq, a także serializację i deserializację; usuń te, których nie potrzebujesz.
FAQ
Co zmienia ustawienie Format nazwy właściwości?
Opisuje sposób zapisywania kluczy w JSON, a nie nazwy pól Rust. Pola to zawsze snake_case; ustawienie wybiera wartość rename_all, więc serde mapuje je z powrotem na camelCase, kebab-case, PascalCase i tak dalej.
W jaki sposób wykrywane są pola opcjonalne?
Gdy obiekty w tej samej tablicy mają różne klucze, brakujące klucze w niektórych elementach stają się Option<T>. Pole obecne w każdym przykładowym elemencie nie jest opcjonalne, nawet jeśli API czasami je pomija.
Czy katalog główny JSON może być tablicą?
Tak. Tablica główna generuje typ publikacji Root = Vec<Root2>; ze strukturą Root2 dla elementów.