Zamiana próbki JSON na struktury Rust z derive serde, zmianami nazw, Option i Vec
Działa w przeglądarce. Wpisane dane nie są nigdzie wysyłane. Sprawdzono 16 października 2026.Wystarczy wkleić próbkę JSON, aby otrzymać struktury Rust z derive Serialize i Deserialize z serde. Liczby całkowite stają się i64, a każda wartość dziesiętna zmienia pole na f64; wartość null lub brakująca w niektórych obiektach staje się Option<T>, a klucze zapisane inaczej niż ich pole w snake_case dostają rename z serde, 1 rename_all, gdy wszystkie są w camelCase.
Ta strona została przetłumaczona maszynowo z angielskiego oryginału. Tłumaczenie nie zostało jeszcze sprawdzone przez człowieka, dlatego wiążąca jest wersja angielska. Przeczytaj angielski oryginał
Wklej próbkę JSON, na przykład odpowiedź API, do lewego pola.
Struktury Rust pojawiają się w trakcie pisania, każda z #[derive(Serialize, Deserialize)], polami w snake_case i potrzebnymi zmianami nazw z serde.
Włącz Option dla każdego pola lub PartialEq, jeśli są potrzebne, i ustaw nazwę struktury głównej.
Kliknij Kopiuj albo Pobierz, aby zapisać models.rs, i dodaj serde (z funkcją derive) oraz serde_json do Cargo.toml.
Rust dekoduje JSON za pomocą serde, a każdy obiekt potrzebuje struktury, której pola mają właściwe typy, a nazwy odpowiadają kluczom JSON. Konwerter pisze takie struktury na podstawie próbki, więc długa odpowiedź API staje się kompilującym się kodem Rust po jednym wklejeniu.
Jak dobierane są typy.
| Wartość JSON | Typ Rust |
|---|---|
| "text" | String |
| true / false | bool |
| 42 (tylko liczby całkowite) | i64 |
| 4.5 (wystąpiła jakakolwiek część dziesiętna) | f64 |
| null oraz inny typ | Option |
| tylko null lub różne rodzaje | serde_json::Value |
| [ ... ] | Vec<...> |
| { } pusty | Map<String, Value> |
| { ... } | osobna struktura |
Brakujące klucze. Wszystkie obiekty tablicy są łączone w jedną strukturę. Klucz, który niektóre pomijają, staje się Option, ponieważ serde traktuje brakujące Option jako None, a każde inne brakujące pole jako błąd. Takie pola dostają też skip_serializing_if, więc przy ponownym zapisie struktury znów są pomijane.
Nazwy. Pola są w snake_case. Gdy każdy klucz jest po prostu formą camelCase swojego pola, struktura ma jedno rename_all; w przeciwnym razie każde inne pole dostaje własne rename. Słowa kluczowe stają się surowymi identyfikatorami, np. r#type; self, super i crate nie mogą być surowe, więc stają się self_ z rename.
Opcje. Option dla każdego pola pasuje do API, które mogą pominąć dowolny klucz. Wyprowadzenie PartialEq pozwala testom porównywać wartości. Struktura główna nazywa się Root, chyba że zostanie nazwana inaczej.
Każdy wynik sprawdzono, odczytując kod Rust z powrotem według reguł serde i dekodując nim 9 próbek. Nic, co zostanie wklejone, nie opuszcza przeglądarki.
Po wklejeniu próbki JSON do konwertera obok pojawiają się struktury Rust, każda z derive Serialize i Deserialize. Należy dodać serde z funkcją derive oraz serde_json do Cargo.toml, wkleić struktury do modułu i dekodować przez serde_json::from_str::<Root>(&text).
Pole staje się Option, gdy w próbce ma wartość null albo gdy niektóre obiekty tablicy pomijają klucz. Serde dekoduje brakujący klucz w Option jako None, a każde inne brakujące pole jest błędem, więc to Option pozwala strukturze przyjąć każdy obiekt próbki.
Pola są zapisywane w snake_case, zgodnie ze stylem Rusta. Gdy każdy klucz jest formą camelCase swojego pola, struktura dostaje jedno #[serde(rename_all = "camelCase")]; w przeciwnym razie każde inaczej zapisane pole dostaje własne #[serde(rename = "key")], więc dekodowane są też klucze takie jak first-name czy 2fa.
JSON nie określa, jak duża może być liczba, więc i64 jest bezpiecznym typem całkowitym, a f64 odpowiada podwójnej precyzji, z jaką odczytywane są liczby JSON. Pole staje się f64, gdy tylko którakolwiek wartość w próbce ma część dziesiętną, bo serde odmawia odczytania 4.5 do liczby całkowitej.
Słowa kluczowe są zapisywane jako surowe identyfikatory, np. r#type, a serde usuwa r# przy porównaniu z kluczem, więc rename nie jest potrzebne. Cztery słowa kluczowe, które nie mogą być surowe, self, Self, super i crate, stają się self_ i podobnymi, z rename z powrotem na oryginalny klucz.
Nie. Konwersja działa w przeglądarce bez żadnego żądania do serwera, a JSON nie jest zapisywany, więc odpowiedzi API z tokenami lub danymi osobowymi zostają na urządzeniu. Po zamknięciu karty nic nie pozostaje.
Stawki i przepisy się zmieniają; przed oparciem się na danej liczbie należy sprawdzić źródło.
Nadal coś nie działa? Zapytaj o narzędzie Konwerter JSON na struktury Rust a odpowiedzieć może każdy, kto zna odpowiedź. Konto nie jest potrzebne.