Przejdź do treści

JSON na strukturę Rust

Konwertuj dokument JSON na struktury Rust gotowe do serde.

Wejście
Wynik

JSON na strukturę Rust

Wklej obiekt JSON lub tablicę, a narzędzie generuje odpowiadające mu struktury Rust, gotowe do projektu, który używa serde do serializacji. Oszczęza to żmudnego ręcznego pisania typów pól i atrybutów derive za każdym razem, gdy zmienia się odpowiedź API lub plik konfiguracyjny.

Opcje kontrolują wygląd wygenerowanego kodu. Wybierz, które cechy chcesz uzyskać — Debug, Clone, Serialize, Deserialize, PartialEq — i czy chcesz dodać #[serde(rename_all = "camelCase")], aby idiomatyczne pola Rust snake_case nadal poprawnie deserializowały klucze JSON camelCase. Wartości null mogą automatycznie stać się Option<T>, a dla liczb całkowitych możesz wybrać i32, i64 lub u64 i dla tekstu string lub pożyczony &str (z lifetime). Zagnieżdżone obiekty mogą generować się jako osobne struktury na poziomie projektu lub być opakowane we własnym pub mod, a pola mogą być publiczne lub prywatne.

Pola w tablicy obiektów są łączone w jedną strukturę: pole, które istnieje tylko u niektórych elementów, automatycznie staje się Option<T>, więc struktura wygenerowana z kilku przykładowych rekordów nadal pasuje do pełnego zbioru danych. Nazwy pól są konwertowane na snake_case, słowa kluczowe Rust są zmieniane na identyfikatory surowe, takie jak r#type, a nazwa, którą nie można czystо reprezentować, zachowuje swój oryginalny klucz poprzez #[serde(rename = "...")] zamiast tego.

Wszystko działa lokalnie w Twojej przeglądarce — Twój JSON nigdy nigdzie nie jest przesyłany, więc jest bezpiecznie wklejanie rzeczywistych ładunków API lub danych konfiguracyjnych. Skopiuj wygenerowany kod, pobierz go jako plik .txt lub prześlij dane wyjściowe z powrotem na wejście do dalszego przetworzenia.

Częste pytania

Czy zainstaluje serde lub doda je do Cargo.toml?
Nie. Generuje tylko kod struktury. Dodaj serde z funkcją derive do swojego Cargo.toml oddzielnie: serde = { version = "1", features = ["derive"] }.
Co się stanie z polem, które jest null w niektórych rekordach a obecne w innych?
Gdy opcja "Opakowuj null pola w Option<T>" jest włączona, to pole staje się Option<T>, aby poprawnie deserializować się niezależnie od tego, czy jest obecne, null czy brakujące.
Dlaczego pole otrzymuje atrybut #[serde(rename = "...")]?
To pojawia się, gdy przejmenowanie camelCase jest wyłączone i klucz JSON nie odpowiada wygenerowanej nazwie pola snake_case Rust, więc dokładny oryginalny klucz jest zachowywany do deserializacji.
Czy może generować struktury z tablicy na najwyższym poziomie?
Tak. Tablica obiektów produkuje alias typu, taki jak pub type Root = Vec<Item>; plus strukturę Item, łącząc pola wszystkich elementów w tablicy.
Czy mój JSON gdzieś jest przesyłany?
Nie. Generowanie struktur działa całkowicie w Twojej przeglądarce — Twój JSON nigdy nie opuszcza Twojego urządzenia.