Rust till JSON-konverterare
Klistra in Rust-structs med Serialize-derive. Få ren JSON tillbaka.
Vad verktyget gör
Om du någon gång har definierat en struct, slängt #[derive(Serialize)] på den och insett att du bara vill ha JSON utan att skriva serde-boilerplate, lägga till serde_json i Cargo.toml och köra cargo run — då gör det här verktyget precis det. Klistra in din Rust här och få giltig JSON tillbaka utan att röra cargo. Den klarar en enskild struct-literal, en hel modul med flera typer eller något med djupt nästlade Vec och Option — samma resultat: ett rent JSON-dokument med varje fält bevarat.
Konverteraren följer hur serde faktiskt serialiserar värden. String och &str blir JSON-strängar. i32, u64, f32, f64 blir alla JSON-tal. bool blir true/false. Vec<T>, &[T] och [T; N] blir JSON-arrayer. HashMap<String, V> / BTreeMap<String, V> blir JSON-objekt. Option<T> med None blir JSON-null; med Some(value) serialiseras den inre typen. Tupler kommer ut som heterogena arrayer — exakt det beteendet som dokumenteras på serde.rs/data-model.
Serde-attribut respekteras. #[serde(rename = "x")] döper om JSON-nyckeln, #[serde(skip)] tar bort fältet och #[serde(flatten)] lyfter fält från en nästlad struct upp till föräldraobjektet. enum-typer följer externally-tagged-representationen som standard (konfigurerbart med #[serde(tag = "type")]). Klistra in flera structs på en gång och var och en kommer ut som en toppnivåpost. Om du jobbar med webtjänster byggda på Rusts standardbibliotek plus axum/actix så landar det här direkt i dina integrationstester.
Så här använder du det
Tre steg. Funkar likadant oavsett om du klistrar in en struct eller en hel modul med ett dussin typer.
Klistra in din Rust (eller ladda exemplet)
Släng in din Rust i vänstra editorn som den är. En struct, en tuple struct, en enum med varianter, flera typer eller nästlade Vec/Option/HashMap — allt funkar. Klicka på Ladda exempel för att se ett realistiskt fall först.
Du behöver inte ta bort use-satser, lifetimes eller derive-attribut. Låt Rust-syntaxen vara som den är — serde-attributen är en del av det parsern läser.
Tryck på Konvertera
Klicka på den gröna Konvertera-knappen. Verktyget läser Rusten, bevarar varje struct och fält och skickar ut JSON i en svep. En kort laddningsindikator snurrar under tiden.
Kopiera JSON
Högra panelen fylls med indenterad JSON. Kopiera den till ett reqwest-test, ett axum-integrationstest, dina OpenAPI-exempel eller ett curl-kommando. Ingen ombyggnad behövs.
När det här verkligen kommer till nytta
Fixtures för webtjänster
Du har en axum- eller actix-request-struct och behöver JSON till ett test eller ett curl-anrop. Klistra in structen, ta JSON, kör vidare — ingen cargo-cykel.
Config-mallar för CLI:er
En clap-driven CLI med en Config-struct. Konvertera den till en JSON-mall som användare kan redigera, utan att skriva en egen <code>Default</code>-impl bara för dokumentationen.
Seeds till integrationstester
Gör om struct-literalerna från dina enhetstester till JSON-seed-filer för integrationstester, mock-servrar eller fixtures till inbäddade databaser.
Dokumentation som följer koden
Generera JSON-exempel till din README eller OpenAPI-spec direkt från de riktiga Rust-typerna, så slutar dokumentationen glida iväg.
Vanliga frågor
Behöver jag serde och serde_json i min Cargo.toml?
Inte för det här verktyget — det kör på serversidan och kompilerar inte din kod. För runtime-användning i din egen app är serde med derive-featuren plus serde_json standardkombinationen.
Respekterar det #[serde(rename)], #[serde(skip)] och #[serde(flatten)]?
Ja. #[serde(rename = "x")] döper om JSON-nyckeln, #[serde(skip)] tar bort fältet ur utmatningen och #[serde(flatten)] lyfter nästlade struct-fält till föräldern — precis som dokumentationen för serde field attributes beskriver.
Hur hanteras Option, Vec och HashMap?
Option<T> med None blir JSON-null; med Some(v) serialiseras det inre värdet. Vec<T>, slices och arrayer blir JSON-arrayer. HashMap<String, V> och BTreeMap<String, V> blir JSON-objekt; mappar med icke-string-nycklar får nycklarna stringifierade.
Vad gäller för enums med varianter?
Som standard använder enum-varianter externally-tagged-representationen ({ "VariantName": {...} }). Attributen #[serde(tag = "type")], #[serde(untagged)] och #[serde(content = "data")] växlar till internally-tagged, untagged eller adjacently-tagged — verktyget läser de attributen och matar ut därefter.
Sparas min kod?
Din kod skickas till backend för konvertering och lagras inte — vi loggar inte payloaden. Gå igenom känslig kod innan du klistrar in.
Vad händer om Rust-koden använder lifetimes eller generics?
Lifetimes (&'a str) ignoreras — JSON har inget begrepp för dem. Konkretiserade generics (Vec<User>) funkar. Oinstansierade generics kommer ut som null. Makron som expanderar till riktig syntax funkar; makron som förlitar sig på en proc-macro-crate som inte syns här behandlas som opaka.
Andra verktyg som kan komma till användning
Rust till JSON är bara en bit av pusslet. De här sitter bra ihop: