Przejdź do treści

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ć

  1. Wklej próbkę JSON; jeśli pole jest opcjonalne, uwzględnij elementy tablicy zarówno z nim, jak i bez niego.
  2. 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 = ...)].
  3. 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.

Specyfikacje i referencje