Indsæt Rust til venstre og klik på "Konvertér" — vi laver JSON ud af detIndsæt Rust-kode

Hvad værktøjet gør

Hvis du nogensinde har defineret en struct, klasket #[derive(Serialize)] på den og fundet ud af, at du bare har brug for JSON uden at skrive serde-boilerplate, tilføje serde_json til Cargo.toml og køre cargo run — så er det præcis det, værktøjet her gør. Indsæt din Rust her og få gyldig JSON retur uden at røre cargo. Det klarer en enkelt struct-literal, et helt modul med flere typer eller noget med dybt indlejrede Vec og Option — samme resultat: et rent JSON-dokument, hvor hvert felt er bevaret.

Konverteren følger, hvordan serde rent faktisk serialiserer værdier. String og &str bliver JSON-strenge. i32, u64, f32, f64 bliver alle JSON-tal. bool bliver true/false. Vec<T>, &[T] og [T; N] bliver JSON-arrays. HashMap<String, V> / BTreeMap<String, V> bliver JSON-objekter. Option<T> med None bliver JSON-null; med Some(value) serialiseres den indre type. Tupler kommer ud som heterogene arrays — præcis den opførsel, der er dokumenteret på serde.rs/data-model.

Serde-attributter bliver respekteret. #[serde(rename = "x")] omdøber JSON-nøglen, #[serde(skip)] fjerner feltet og #[serde(flatten)] løfter felter fra en indlejret struct op til forældreobjektet. enum-typer følger som standard externally-tagged-repræsentationen (kan ændres med #[serde(tag = "type")]). Indsæt flere structs på én gang, og hver kommer ud som en topniveau-post. Hvis du arbejder med webservices oven på Rusts standardbibliotek plus axum/actix, falder det her direkte ned i dine integrationstests.

Sådan bruger du det

Tre trin. Virker ens, uanset om du indsætter én struct-literal eller et helt modul med et dusin typer.

1

Indsæt din Rust (eller indlæs eksemplet)

Smid din Rust ned i venstre editor, som den er. En struct, en tuple struct, en enum med varianter, flere typer eller indlejrede Vec/Option/HashMap — det hele fungerer. Klik på Indlæs eksempel for at se et realistisk tilfælde først.

Du behøver ikke fjerne use-sætninger, lifetimes eller derive-attributter. Lad Rust-syntaksen stå — serde-attributterne er en del af det, parseren læser.

2

Tryk på Konvertér

Klik på den grønne Konvertér-knap. Værktøjet læser Rust-koden, bevarer hver struct og hvert felt og sender JSON ud i ét hug. Imens kører der en kort loadingindikator.

3

Kopiér JSON

Højre panel fyldes med indrykket JSON. Kopiér det ind i en reqwest-test, en axum-integrationstest, dine OpenAPI-eksempler eller en curl-kommando. Ingen genbygning nødvendig.

Hvornår det her faktisk er praktisk

Fixtures til webservices

Du har en axum- eller actix-request-struct og skal bruge JSON til en test eller et curl-kald. Indsæt structen, hiv JSON'en, videre — ingen cargo-cyklus.

Config-skabeloner til CLI'er

En clap-drevet CLI med en Config-struct. Konvertér den til en JSON-skabelon, som brugere kan redigere, uden at skrive en skræddersyet <code>Default</code>-impl kun til dokumentationen.

Seeds til integrationstests

Lav struct-literalerne fra dine unit tests om til JSON-seed-filer til integrationstests, mock-servere eller fixtures til indlejrede databaser.

Dokumentation, der følger koden

Generér JSON-eksempler til din README eller OpenAPI-spec direkte fra de rigtige Rust-typer, så dokumentationen ikke sejler væk fra koden.

Typiske spørgsmål

Har jeg brug for serde og serde_json i min Cargo.toml?

Ikke til det her værktøj — det kører serverside og kompilerer ikke din kode. Til runtime-brug i din egen app er serde med derive-featuren plus serde_json standardkombinationen.

Respekterer det #[serde(rename)], #[serde(skip)] og #[serde(flatten)]?

Ja. #[serde(rename = "x")] omdøber JSON-nøglen, #[serde(skip)] fjerner feltet fra outputtet og #[serde(flatten)] løfter indlejrede struct-felter op til forælderen — nøjagtig som dokumentationen for serde field attributes beskriver.

Hvordan håndteres Option, Vec og HashMap?

Option<T> med None bliver JSON-null; med Some(v) serialiseres den indre værdi. Vec<T>, slices og arrays bliver JSON-arrays. HashMap<String, V> og BTreeMap<String, V> bliver JSON-objekter; maps med ikke-string-nøgler får deres nøgler stringificeret.

Hvad med enums med varianter?

Som standard bruger enum-varianter externally-tagged-repræsentationen ({ "VariantName": {...} }). Attributterne #[serde(tag = "type")], #[serde(untagged)] og #[serde(content = "data")] skifter til internally-tagged, untagged eller adjacently-tagged — værktøjet læser de attributter og matcher outputtet derefter.

Gemmes min kode?

Din kode sendes til backend'en til konvertering og gemmes ikke — vi logger ikke payloaden. Kast et blik på følsom kode, før du indsætter den.

Hvad hvis Rust-koden bruger lifetimes eller generics?

Lifetimes (&'a str) ignoreres — JSON har ikke begrebet. Konkretiserede generics (Vec<User>) virker. Ikke-instansierede generics kommer ud som null. Makroer, der udvides til rigtig syntaks, virker; makroer, der afhænger af en proc-macro-crate, der ikke er synlig her, behandles som uigennemsigtige.

Andre værktøjer, du måske får brug for

Rust til JSON er bare én brik i puslespillet. De her spiller godt sammen med det: