Hoppa till innehåll
100% lokalt

JSON till Rust-struct

Omvandla ett JSON-dokument till Rust-structs som är redo för serde.

Inmatning
Utmatning

JSON till Rust-struct

Klistra in ett JSON-objekt eller en array och det här verktyget genererar motsvarande Rust-structs som är redo att släppas in i ett projekt som använder serde för serialisering. Det sparar dig från att behöva skriva fälttyper och derive-attribut för hand varje gång ett API-svar eller en konfigurationsfil ändrar form.

Alternativen styr hur den genererade koden ser ut. Välj vilka traits som ska härledas — Debug, Clone, Serialize, Deserialize, PartialEq — och om #[serde(rename_all = "camelCase")] ska läggas till så att idiomatiska snake_case Rust-fält fortfarande deserialiserar camelCase JSON-nycklar korrekt. Null-värden kan automatiskt bli Option<T>, och du kan välja i32, i64 eller u64 för heltal och String eller en lånad &str (med en livstid) för text. Kapslade objekt kan genereras som separata top-level structs eller lindas in i sin egen pub mod, och fält kan vara publika eller privata.

Arrayer av objekt sammanfogas till en enda struct: ett fält som bara finns på vissa element blir automatiskt Option<T>, så en struct som genereras från ett fåtal exempelposter matchar fortfarande den fullständiga datamängden. Fältnamn konverteras till snake_case, Rust-nyckelord omvandlas till raw identifiers som r#type, och ett namn som inte kan representeras rent behåller sin ursprungliga nyckel via #[serde(rename = "...")] istället.

Allt körs lokalt i din webbläsare — ditt JSON överförs aldrig någonstans, så det är säkert att klistra in verkliga API-nyttolaster eller konfigurationsdata. Kopiera den genererade koden, ladda ned den som en .txt-fil eller skicka utmatningen tillbaka till inmatningen för att förbättra den ytterligare.

FAQ

Installerar den serde eller lägger det till i Cargo.toml?
Nej. Det genererar bara struct-koden. Lägg till serde med derive-funktionen separat i din Cargo.toml: serde = { version = "1", features = ["derive"] }.
Vad händer med ett fält som är null i vissa poster och närvarande i andra?
När "Kapsla null-fält i Option<T>" är aktiverad, blir det fältet Option<T> så att det deserialiseras korrekt oavsett om det är närvarande, null eller saknas.
Varför får ett fält ett #[serde(rename = "...")] attribut?
Det här visas när camelCase-namngivning är inaktiverad och JSON-nyckeln inte matchar det genererade snake_case Rust-fältnamnet, så den exakta ursprungliga nyckeln behålls för deserialisering.
Kan det generera structs från en array på toppnivån?
Ja. En array av objekt producerar ett typ-alias som pub type Root = Vec<Item>; plus Item-structen, sammanslaget fält från varje element i arrayen.
Överförs min JSON någonstans?
Nej. Struct-generering körs helt i din webbläsare — ditt JSON lämnar aldrig din enhet.