← Alle Tools Code Gen

JSON zu Rust Struct Generator

JSON einfügen und idiomatische Rust-Structs mit serde-Derives produktionsbereit erhalten.

0 Z.

100% clientseitig

Die gesamte Konvertierung läuft in Ihrem Browser. Ihre Daten werden nie an einen Server gesendet.

Rust-Structs und Serde

Serde ist der De-facto-Standard für JSON-Serialisierung in Rust. Der Generator erzeugt Struct-Definitionen dekoriert mit #[derive(Debug, Clone, Serialize, Deserialize)] — die häufigste Derive-Kombination für Daten-Structs. serde_json wird als Runtime angenommen, sodass der generierte Code sofort mit serde_json::from_str und serde_json::to_string funktioniert.

Das Typ-Mapping folgt Rust-Idiomen: JSON-Zeichenketten werden zu String, Ganzzahlen zu i64, Dezimalzahlen zu f64, Booleans zu bool und Arrays zu Vec<T>. Verschachtelte Objekte generieren separate benannte Structs. Felder die im JSON null sind oder in einigen Array-Objekten fehlen werden als Option<T> typisiert, mit #[serde(skip_serializing_if = "Option::is_none")] um sie bei None wegzulassen.

Feldnamen in Rust verwenden snake_case, während JSON häufig camelCase verwendet. Der Generator gibt #[serde(rename = "originalKey")] für Felder aus deren Rust-Name vom JSON-Schlüssel abweicht, und optional #[serde(rename_all = "camelCase")] als Container-Attribut.

Ownership, Lifetimes und Performance

Die Standardausgabe verwendet besessene String-Typen für Textfelder, was bedeutet dass die Struct alle Daten besitzt und frei bewegt und gespeichert werden kann. Ein alternativer "geliehener" Modus ersetzt String durch &str (mit Lifetime-Parameter) und vermeidet Allokation beim Deserialisieren aus einem bereits besessenen Puffer.

Für große JSON-Dokumente unterstützt serde_json Streaming-Deserialisierung via serde_json::Deserializer::from_reader. Die generierten Structs sind vollständig streaming-kompatibel da serde's trait-basiertes Design quellenagnostisch ist.

Rusts exhaustives Pattern-Matching bedeutet dass das Hinzufügen eines neuen Feldes zu einer JSON-Antwort bestehenden Code nicht still brechen wird. Das #[serde(deny_unknown_fields)]-Attribut kann hinzugefügt werden um unerwartete JSON-Schlüssel zu erkennen.

Rust-Entwicklungs-Workflows

Rust-Backend-Entwickler die Axum, Actix-web oder Warp verwenden benötigen typisierte Anfrage- und Antwortmodelle. Der Generator erzeugt Structs die direkt mit Axums Json<T>-Extractor und Antworttyp funktionieren.

CLI-Tools und Datenverarbeitungsskripte in Rust parsen oft JSON-Konfigurationsdateien oder API-Antworten. Der Generator bootstrapt Struct-Definitionen damit Sie sich auf die Geschäftslogik konzentrieren können.

WebAssembly (WASM)-Projekte die JavaScript-APIs aufrufen empfangen oft JSON-Daten. Die generierten serde-Structs sind mit wasm-bindgen und serde-wasm-bindgen kompatibel.

FAQ

Werden meine Daten an einen Server gesendet?

Nein. Die gesamte Verarbeitung findet vollständig in Ihrem Browser statt. Ihr JSON verlässt Ihr Gerät nie.

Welche Cargo-Abhängigkeiten brauche ich?

Fügen Sie serde = { version = "1", features = ["derive"] } und serde_json = "1" zu Ihrer Cargo.toml hinzu. Der generierte Code importiert nur diese zwei Crates.

Wie werden Rust-reservierte Wörter als Feldnamen behandelt?

Rust-reservierte Wörter wie "type", "match", "use" und "ref" werden mit r# präfixiert (Raw-Bezeichner-Syntax, z.B. r#type) und ein #[serde(rename = "type")]-Attribut bewahrt den ursprünglichen JSON-Schlüssel.

Kann ich Enums für String-Union-Typen generieren?

Der Basis-Generator erzeugt Structs. Für JSON-Felder die als diskriminierte Enums agieren können Sie manuell das String-Feld durch ein Rust-Enum mit #[derive(Deserialize)] ersetzen.

Werden tief verschachtelte Strukturen unterstützt?

Ja. Jedes verschachtelte JSON-Objekt wird zu seiner eigenen benannten Struct. Alle Structs werden in einer Datei in Abhängigkeitsreihenfolge ausgegeben.

Ähnliche Tools