Skip to content

Konwerter JSON na struktury Rust

Wklej JSON i uzyskaj idiomatyczne struktury serde w Rust natychmiast, w 100% w przeglądarce. Poprawne typy i64/u64/f64, Option dla wartości null, #[serde(rename)] dla camelCase. Bezpłatnie.

Bez śledzenia Działa w przeglądarce Bezpłatne
Opcje
0 znaków
Wynik Rust
0 linii
Wynik zweryfikowano względem semantyki serde i formatowania rustfmt dla rzeczywistych ładunków API. — Go Tools Team · Jul 2, 2026

Czym jest konwersja JSON na Rust?

Konwersja JSON na Rust zamienia próbkę JSON w gotowe do skompilowania struktury Rust z makrami #[derive(Serialize, Deserialize)] z serde, dzięki czemu nigdy nie piszesz ręcznie szablonowego kodu deserializacji dla odpowiedzi API czy plików konfiguracyjnych. Ten szybki generator struktur Rust wnioskuje poprawne typy liczbowe, oznacza brakujące pola jako Option i dodaje #[serde(rename)] dla kluczy spoza snake_case — wszystko w 100% w przeglądarce.

Przykłady

Odpowiedź API

{"id":101,"name":"Ada Lovelace","email":"ada@example.com","active":true,"roles":["admin","user"]}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub id: i64,
    pub name: String,
    pub email: String,
    pub active: bool,
    pub roles: Vec<String>,
}

Typowy ładunek REST staje się gotową dla serde strukturą, którą wstawisz do swojego klienta. Liczby są wnioskowane jako i64, tablice stają się Vec<String>.

Zagnieżdżony obiekt

{"repo":"serde","owner":{"login":"dtolnay","id":100}}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub repo: String,
    pub owner: Owner,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Owner {
    pub login: String,
    pub id: i64,
}

Zagnieżdżone obiekty stają się osobnymi, nazwanymi strukturami (Owner) wskazywanymi przez pole — identyczne kształty są deduplikowane.

Tablica obiektów (pole opcjonalne)

{"users":[{"id":1,"nick":"x"},{"id":2}]}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub users: Vec<User>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    pub id: i64,
    pub nick: Option<String>,
}

Tablice obiektów są scalane w jedną strukturę elementu. Klucze brakujące w niektórych elementach stają się Option<String> — bez potrzeby #[serde(default)].

Klucze camelCase

{"login":"octocat","publicRepos":15,"followerCount":9001,"createdAt":"2011-01-25"}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub login: String,
    #[serde(rename = "publicRepos")]
    pub public_repos: i64,
    #[serde(rename = "followerCount")]
    pub follower_count: i64,
    #[serde(rename = "createdAt")]
    pub created_at: String,
}

Pola stają się snake_case z #[serde(rename)] mapującym z powrotem na oryginalny klucz JSON. Klucze już w snake_case, jak login, nie otrzymują rename.

Jak przekonwertować JSON na struktury Rust

  1. 1

    Wklej swój JSON

    Wstaw obiekt JSON, tablicę lub odpowiedź API do pola wejściowego. Konwersja zaczyna się natychmiast.

  2. 2

    Dostrój wynik

    Zmień nazwę struktury głównej i przełączaj derywacje serde, Debug i Clone lub widoczność pub, aby dopasować się do stylu swojego crate'a.

  3. 3

    Skopiuj lub pobierz

    Przejmij wygenerowany kod Rust jednym kliknięciem i wklej go prosto do swojego projektu.

Common Use Cases

Typowani klienci API
Zamień przykładową odpowiedź REST lub GraphQL w struktury serde dla klienta reqwest lub podobnego, bez ręcznego pisania szablonowego kodu deserializacji.
Parsowanie konfiguracji i fikstur
Generuj struktury dla plików konfiguracyjnych JSON, fikstur testowych lub ładunków webhooków, które musisz deserializować z serde_json.
Szybkie prototypowanie
Wklej nieznany ładunek, aby natychmiast zobaczyć jego kształt jako typy Rust — szybki sposób na poznanie nowego API przed jego podłączeniem.

Jak działa konwersja

Wnioskowanie strukturalne
Każdy obiekt staje się nazwaną strukturą; identyczne kształty są deduplikowane, więc otrzymujesz jedną strukturę, a nie kopie. Tablice obiektów są scalane klucz po kluczu, a klucze nieobecne w niektórych elementach stają się Option<T>.
Poprawne typowanie liczb
Liczby całkowite są mapowane na i64, awansują do u64 powyżej i64::MAX i przechodzą na f64 powyżej u64. Liczby zmiennoprzecinkowe są rozpoznawane po tokenie (1.0, 2e3), więc deserializacja serde nigdy nie zawodzi na niezgodności typu zmiennoprzecinkowego z całkowitym.
Idiomatyczne, kompilowalne identyfikatory
Klucze stają się polami snake_case z #[serde(rename)] wskazującym z powrotem na oryginalny klucz; słowa kluczowe Rust, zduplikowane nazwy i klucze niebędące identyfikatorami są sanityzowane, więc wynik zawsze się kompiluje.
100% po stronie klienta
Parsowanie i generowanie działają w przeglądarce bez wywołań sieciowych, więc twoje dane pozostają prywatne.

Wskazówki dla czystych struktur Rust

Nazwij swoją strukturę główną
Ustaw sensowną nazwę główną (np. User, ApiResponse) zamiast domyślnego Root, aby kod był czytelny.
Dodawaj serde_json tylko wtedy, gdy to konieczne
serde_json::Value pojawia się przy pustych lub mieszanych tablicach oraz polach zawierających wyłącznie null. Nadaj tym polom konkretny typ na podstawie bogatszej próbki, jeśli możesz, lub dodaj serde_json do Cargo.toml.
Przejrzyj Option kontra pola wymagane
Pola są oznaczane jako Option<T> tylko wtedy, gdy próbka je pomija. Wklej reprezentatywny ładunek, aby narzędzie dokładnie wywnioskowało pola wymagane i opcjonalne.

Najczęściej zadawane pytania

Jak przekonwertować JSON na strukturę Rust?
Wklej JSON do pola wejściowego. Konwerter odczytuje go natychmiast w przeglądarce i generuje struktury Rust z derywacjami serde po prawej stronie. Kliknij Skopiuj, aby przejąć wynik — bez przesyłania, bez konta, bez czekania.
Czy generuje derywacje serde? Czy potrzebuję serde i serde_json?
Tak — wynik domyślnie używa #[derive(Debug, Clone, Serialize, Deserialize)]. Dodaj serde z funkcją derive do pliku Cargo.toml. Zależność serde_json jest potrzebna tylko wtedy, gdy wynik zawiera serde_json::Value, co pojawia się przy pustych lub mieszanych tablicach oraz polach zawierających wyłącznie null. Wyłącz przełącznik serde, aby uzyskać zwykłe struktury.
Jak użyć wygenerowanej struktury do parsowania JSON?
Dodaj serde_json do pliku Cargo.toml, a następnie deserializuj w jednej linii: let root: Root = serde_json::from_str(json)?;. Wygenerowana derywacja Deserialize robi resztę — użyj serde_json::from_slice dla wycinka bajtów lub from_reader dla pliku albo treści HTTP, a serde_json::to_string do serializacji z powrotem.
Jak obsługiwane są pola opcjonalne i null?
Gdy klucz pojawia się w niektórych elementach tablicy, ale nie w innych, staje się polem Option. Pole, które zawsze jest tylko null, staje się opcjonalnym serde_json::Value. serde automatycznie traktuje Option jako opcjonalne, więc żaden atrybut #[serde(default)] nie jest dodawany ani wymagany.
Jak obsługuje klucze camelCase i słowa kluczowe Rust?
Nazwy pól są konwertowane na idiomatyczny snake_case, a atrybut #[serde(rename)] mapuje je z powrotem na dokładny klucz JSON. Zarezerwowane słowa kluczowe, takie jak type czy match, są emitowane jako type_ lub match_ z rename, co jest bardziej niezawodne niż surowe identyfikatory, ponieważ obejmuje także self, crate i super.
Czy może użyć #[serde(rename_all)] zamiast rename dla każdego pola?
Narzędzie emituje #[serde(rename)] dla każdego pola, ponieważ zawsze działa — nawet gdy jeden ładunek miesza camelCase, snake_case i nieregularne klucze. Jeśli każde pole w strukturze ma jedną konwencję, usuń te atrybuty i umieść na strukturze pojedynczy #[serde(rename_all = "camelCase")]; oba deserializują się identycznie.
Jakiego typu liczbowego Rust używa?
Liczby całkowite są mapowane na i64 lub u64, gdy wartość przekracza i64::MAX, a powyżej u64 przechodzą na f64 — dzięki czemu duże identyfikatory nadal wracają bez strat. Każda liczba zapisana z kropką dziesiętną lub wykładnikiem (jak 1.0 lub 2e3) jest mapowana na f64, ponieważ serde odrzuciłby liczbę zmiennoprzecinkową w polu całkowitym.
Jak typowane są daty i znaczniki czasu?
JSON nie ma typu daty, więc ciągi ISO, takie jak 2011-01-25, lub znaczniki czasu RFC 3339 wychodzą jako String. Aby prawdziwie obsługiwać daty, zmień pole na typ chrono — DateTime w strefie czasowej Utc lub NaiveDate — i włącz funkcję serde biblioteki chrono. serde parsuje wtedy RFC 3339 automatycznie.
Jak obsłużyć obiekty z dynamicznymi lub nieznanymi kluczami?
Gdy klucze się różnią — na przykład mapa identyfikatorów na wartości — zastąp wygenerowaną strukturę typem HashMap z kluczem String. Aby zachować typowaną strukturę, a jednocześnie przechwytywać dodatkowe pola, dodaj pole #[serde(flatten)] będące HashMap. Dla w pełni dynamicznych wartości typem uniwersalnym jest serde_json::Value.
Czy moje dane JSON są prywatne i bezpieczne?
Tak. Konwersja odbywa się w 100% w przeglądarce przy użyciu JavaScript. Twój JSON — w tym tokeny, identyfikatory czy dane klientów — nigdy nie opuszcza strony i nigdy nie jest wysyłany na serwer.
Czy mogę generować zwykłe struktury Rust bez serde?
Tak. Wyłącz przełącznik serde, aby usunąć linię use serde, derywacje Serialize i Deserialize oraz wszystkie atrybuty #[serde(rename)] — pozostawiając czyste struktury. Możesz też przełączać derywacje Debug i Clone oraz widoczność pub.
Czy narzędzie jest bezpłatne? Czy potrzebuję konta?
Jest całkowicie bezpłatne, bez rejestracji, bez limitów i bez reklam zaśmiecających obszar roboczy.

Powiązane narzędzia

Zobacz wszystkie narzędzia →