logo
GeekFormat

JSON zu Rust

Kostenloses Online-Tool JSON zu Rust. Fügen Sie API-Antwort-JSON ein, um automatisch Serde-Derive-Structs zu generieren, verschachtelte Objekte unabhängig aufgeteilt, Vec und Option intelligent erkannt, reine lokale Browser-Konvertierung, keine Registrierung erforderlich.

Ähnliche Tools

Über JSON zu Rust: JSON-Daten in kompilierbare Rust-Structs umwandeln

JSON zu Rust ist der Prozess der Umwandlung von JSON-formatierten Daten (Objekten oder Arrays) in Rust-struct-Typdefinitionen. Rust ist eine stark typisierte Systemprogrammiersprache, die häufig für Backend-Dienste, CLI-Tools, WebAssembly, eingebettete Systeme und Blockchain-Szenarien verwendet wird. In der Entwicklung müssen Sie häufig JSON-Beispiele aus API-Dokumentationen oder tatsächlichen Antworten in Rust-Typen konvertieren; das manuelle Schreiben von Structs ist nicht nur repetitiv, sondern auch anfällig für Feldtypfehler. Dieses Tool zielt darauf ab, diesen Prozess zu automatisieren, damit sich Entwickler auf die Geschäftslogik konzentrieren können.

Dieses Tool läuft lokal im Browser auf Basis von quicktype-core und verwendet die Renderoptionen just-types und no-comments, um sauberen Struct-Code für Rust zu generieren. Die Ausgabe umfasst use serde::{Serialize, Deserialize}; und entsprechende #[derive(Serialize, Deserialize)], direkt verwendbar mit serde_json zur Deserialisierung. Das bedeutet, dass Sie nicht nur einen Typentwurf erhalten, sondern Rust-Code, der in ein Cargo-Projekt gelegt und mit minimaler Abhängigkeitskonfiguration kompiliert/ausgeführt werden kann.

Typerkennung ist das Herzstück von JSON zu Rust. Das Tool ordnet JSON-Grundtypen Rust-Standardtypen zu: Zeichenfolgen zu String, Ganzzahlen zu i64, Gleitkommazahlen zu f64, Boolesche Werte zu bool, Arrays zu Vec<T>, verschachtelte Objekte zu unabhängigen Structs, Nullwerte zu Option<serde_json::Value>. Bei verschachtelten Objekten erstellt das Tool automatisch neue Structs für jede Ebene, benannt nach Großschreibung der ersten Buchstaben der Felder, z.B. generiert ein address-Feld eine Address-struct, Objekte in items-Arrays generieren eine Item-struct.

Im Gegensatz zu einigen Online-Tools, bei denen JSON zur Verarbeitung an Server hochgeladen werden muss, erfolgen alle Berechnungen dieses Tools in Ihrem Browser. quicktype-core wird über Web Worker geladen und ausgeführt; JSON-Parsing, Typerkennung, Rust-Codegenerierung und Dateidownloads erfolgen alle lokal, wobei keine Daten an einen Server gesendet werden. Dies ist besonders wichtig für JSON, das API-Schlüssel, Benutzerdatenschutzfelder oder nicht veröffentlichte Geschäftsstrukturen enthält; Daten werden beim Schließen der Seite aus dem Speicher gelöscht, was es zu einer sicheren Wahl für die JSON-Deserialisierung im Unternehmensintranet macht.

Generierter Code wird typischerweise in Cargo-Projekten verwendet. Sie müssen in Cargo.toml die Abhängigkeiten serde = { version = "1", features = ["derive"] } und serde_json = "1" hinzufügen, generierte Structs in .rs-Dateien im src-Verzeichnis kopieren und über mod-Deklarationen importieren. Dann können Sie serde_json::from_str::<User>(&json_string) verwenden, um echte API-Antworten in stark typisierte Structs umzuwandeln und Rusts Kompilierzeit-Typprüfung zu genießen. Für gängige Rust-Web-Frameworks wie Actix-web, axum, Rocket, Warp können generierte Structs direkt als Handler-Parameter und Antwortmodelle dienen.

Beachten Sie, dass automatisch generierter Code ein Ausgangspunkt und kein Endpunkt ist. Das Tool leitet Typen aus JSON-Beispielen ab und kann keine genauen Geschäftstypen bestimmen (z.B. werden semantische Typen wie URL, E-Mail, ID, Zeitstempel alle einheitlich als String oder i64 abgeleitet). Bei snake_case-JSON-Feldern werden Rust-struct-Felder unverändert generiert; Sie müssen möglicherweise manuell #[serde(rename = "user_name")] hinzufügen, um die Deserialisierungszuordnung aufrechtzuerhalten, oder String in semantische Typen wie chrono::DateTime<Utc>, uuid::Uuid, url::Url ändern. Wir empfehlen, generierte Ergebnisse als erste Entwürfe zu verwenden und dann Feldnamen, Typen und Annotationen gemäß Projektkonventionen zu verfeinern.

Anwendungsfälle

  • REST-API-Integration: Konvertieren Sie Backend-JSON-Antworten in Rust struct, verwenden Sie sie mit reqwest + serde_json für stark typisierte HTTP-Request-Body- und Antwort-Parsing
  • Actix-web-Backend-Entwicklung: Konvertieren Sie API-Parameterbeispiel-JSON in Rust struct, kompilieren und führen Sie sie direkt als web::Json<T>-Parameter oder Antwortmodelle aus
  • axum-Backend-Entwicklung: Konvertieren Sie axum-Handler-Parameter-JSON in Rust struct, arbeiten Sie mit Json<T>-Extraktor zur Verarbeitung von POST-Request-Bodys
  • Microservice-Schnittstellendefinition: Konvertieren Sie gRPC/HTTP-Dienst-Request-Body-Beispiel-JSON in Rust-Typen, vereinheitlichen Sie serverseitige Modelldefinitionen teamübergreifend
  • CLI-Tool-Entwicklung: Konvertieren Sie Konfigurationsdatei-JSON-Beispiele in Rust struct, verwenden Sie sie mit serde + clap zum Parsen von Befehlszeilenargumenten und Konfiguration
  • WebAssembly-Projekte: Stark typisierte Verarbeitung von Frontend-JS-übergebenen JSON-Daten auf Rust/WASM-Seite mit generierten Structs, reduziert Laufzeit-Typfehler
  • Tauri-Desktop-Apps: Konvertieren Sie Frontend-invoke-Payload-JSON in Rust struct als #[tauri::command]-Parametertyp
  • Web-Scraper-Daten-Parsing: Konvertieren Sie von Webseiten gescrapte JSON-Daten in Rust-Typen, vermeiden Feldauslassungen durch dynamischen serde_json::Value-Zugriff
  • Spielentwicklung: Konvertieren Sie JSON-Daten für Level-Konfigurationen und Charakterattribute in Rust struct, praktisch für Engines wie Bevy zum Lesen von Konfigurationsressourcen
  • IoT und Eingebettete Systeme: Konvertieren Sie von Geräten gemeldete JSON-Sensordaten in Rust-Typen zum Parsen und Validieren von Edge-Geräte-Nachrichten (no_std-Anpassung erforderlich)
  • Datenbankmigration: Konvertieren Sie aus MongoDB/PostgreSQL exportierte JSON-Dokumente in Rust-Modelle als Referenz für Diesel/SQLx-Entitätsdefinitionen
  • Blockchain/Web3: Konvertieren Sie On-Chain-JSON-RPC-Antworten in Rust struct zur Typkapselung in solana-sdk/substrate-SDKs
  • Testdatenkonstruktion: Konvertieren Sie echte vom Backend zurückgegebene JSON-Fixtures in Rust-Typen für strukturierte Assertions und Golden-Tests in Unit-Tests
  • Strukturierte Protokollanalyse: Konvertieren Sie von ELK/Loki/Vector erfasste JSON-Protokolle in Rust-Typen zur einfachen Filterung, Alarmregeln und Feldextraktion
  • Konfigurationszentrum-Migration: Konvertieren Sie Apollo/Nacos/Consul-JSON-Konfigurationen in Rust-Typen für serverseitiges Config-Hot-Reloading und -Validierung
  • Sprachübergreifende Zusammenarbeit: Wenn Rust-Backend mit TypeScript-Frontend integriert wird, konvertieren Sie dasselbe JSON jeweils in Rust struct und TS-Interface, um beide Seiten konsistent zu halten
  • Open-Source-SDK-Wartung: Generieren Sie Rust-Modelle aus Upstream-API-Dokumentationsbeispiel-JSON, veröffentlichen Sie schnell Rust-Client-SDKs (crates.io-Release)
  • Rust-Lehrbeispiele: Konvertieren Sie Beispiel-JSON in Struct in Kursen, um Serde-Deserialisierungsprozess, Ownership- und Lifetime-Konzepte zu lehren
  • Feldnamenskonvertierung: Fügen Sie nach der Konvertierung von snake_case-JSON-API-Antworten in Rust structs manuell #[serde(rename)] für die Feldzuordnung hinzu, um die Konsistenz des Namensstils zu wahren

Anleitung

  1. Fügen Sie JSON-Inhalt (Objekt oder Array empfohlen) in den linken Editor ein oder klicken Sie auf die Schaltfläche zum Hochladen, um eine .json/.txt-Datei auszuwählen; Sie können auch auf «Beispiel» klicken, um das integrierte Beispiel zu laden
  2. Warten Sie 400ms auf die automatische Konvertierung; der generierte Rust-struct-Code (einschließlich use serde und #[derive(Serialize, Deserialize)]) erscheint rechts
  3. Wenn JSON fehlerhaft ist, erscheint rechts eine rote Fehlermeldung; klicken Sie auf die Schaltfläche «JSON reparieren», um häufige Syntaxprobleme automatisch zu beheben (abschließende Kommas, einfache Anführungszeichen, fehlende Anführungszeichen usw.)
  4. Klicken Sie auf die Schaltfläche «Kopieren», um generierten Rust-Code in das src-Verzeichnis Ihres Cargo-Projekts einzufügen, oder klicken Sie auf «Herunterladen», um ihn als .rs-Datei zu speichern
  5. Fügen Sie in Cargo.toml die Abhängigkeiten serde = { version = "1", features = ["derive"] } und serde_json = "1" hinzu, führen Sie dann cargo build aus, um die Kompilierung zu überprüfen
  6. (Optional) Passen Sie Feldtypen manuell an (z.B. i64→u32), fügen Sie #[serde(rename)] für snake_case/camelCase-Zuordnung hinzu und vervollständigen Sie semantische Typen wie chrono::DateTime je nach Geschäftsanforderungen

Funktionen

  • Lokale Browser-Konvertierung: JSON-Parsing und Rust-Codegenerierung erfolgen vollständig im Browser über quicktype-core Web Worker; eingegebene Daten werden niemals an einen Server hochgeladen
  • Serde-bereite Ausgabe: Generiert automatisch use serde::{Serialize, Deserialize}; und #[derive(Serialize, Deserialize)], direkt verwendbar mit serde_json zur Deserialisierung echter API-Antworten
  • Intelligente Typerkennung: String→String, Ganzzahl→i64, Gleitkommazahl→f64, Bool→bool, Array→Vec<T>, verschachteltes Objekt→unabhängige struct, null→Option<serde_json::Value>
  • Automatische Aufteilung verschachtelter Objekte: Verschachtelte Objekte generieren unabhängige structs, benannt nach Großschreibung des ersten Buchstabens (address→Address), vermeidet doppelte Typdefinitionen, unterstützt beliebige Verschachtelungstiefe
  • Automatische Vec- und Option-Behandlung: JSON-Arrays werden einheitlich zu Vec<T> konvertiert, Nullwerte einheitlich zu Option<serde_json::Value>, reduziert manuelle Typ Schreibarbeit
  • Actix-web/axum/reqwest bereit: Generierte structs direkt verwendbar für Web-Handler-Request-Bodies, HTTP-Client-Antwortmodelle, Tauri-Datenstrukturen
  • 400ms Entprellungs-Autokonvertierung: Konvertierung beim Einfügen, Echtzeit-Rust-Code-Vorschau rechts, vermeidet zusätzliche Klicks und große JSON-Verzögerungen
  • Ein-Klick-JSON-Fehlerbehebung: Behebt automatisch häufige Formatfehler wie abschließende Kommas, einfache Anführungszeichen, fehlende Anführungszeichen, Kommentare; generiert Code nach erfolgreicher Reparatur weiter
  • Kopieren und Herunterladen: Ein Klick kopiert gesamten Rust-Code in die Zwischenablage oder lädt ihn als .rs-Datei direkt in das src-Verzeichnis Ihres Cargo-Projekts herunter
  • localStorage-Verlauf: Speichert automatisch letzte Eingaben lokal, setzt Bearbeitung nach Aktualisierung oder versehentlichem Schließen der Seite schnell fort
  • Responsive geteilte Fenster: JSON-Bearbeitung links, Rust-Code rechts, unterstützt Ziehen zur Größenänderung der Fensterbreiten, angepasst an große Bildschirme und Mobilgeräte
  • Beispieldaten + Dateiupload: Integriertes chinesisches Beispiel (mit verschachteltem address/company/tags), unterstützt Drag-and-Drop oder Klick-Upload von .json/.txt-Dateien

Codebeispiele

Rust: Actix-web-Handler empfängt JSON-Request-Body

rust

Verwenden Sie Actix-web 4.x mit der generierten Struct als web::Json<T>-Parameter; HTTP-POST-Request-Body automatisch deserialisiert.

// Cargo.toml
// [dependencies]
// actix-web = "4"
// serde = { version = "1", features = ["derive"] }
// serde_json = "1"

use actix_web::{web, App, HttpServer, HttpResponse, Responder};
use serde::{Deserialize, Serialize};

// Auto-generiert von diesem Tool (aus JSON)
#[derive(Serialize, Deserialize, Debug)]
pub struct CreateUserRequest {
    name: String,
    email: String,
    age: i64,
    tags: Vec<String>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct User {
    id: i64,
    name: String,
    email: String,
    age: i64,
    tags: Vec<String>,
}

// Actix-web-Handler: JSON-Eingabe automatisch deserialisiert
async fn create_user(payload: web::Json<CreateUserRequest>) -> impl Responder {
    let req = payload.into_inner();
    let user = User {
        id: 1,
        name: req.name,
        email: req.email,
        age: req.age,
        tags: req.tags,
    };
    HttpResponse::Ok().json(user) // Antwort wird ebenfalls mit serde_json serialisiert
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new()
            .route("/users", web::post().to(create_user))
    })
    .bind("127.0.0.1:8080")?
    .run()
    .await
}

/*
 * Client-Aufruf:
 * curl -X POST http://127.0.0.1:8080/users \
 *   -H "Content-Type: application/json" \
 *   -d '{"name":"Alice","email":"a@b.com","age":30,"tags":["rust","actix"]}'
 */

Rust: axum-Routen + reqwest-Client-Antwort-Parsing

rust

axum-Server verwendet Json<T>-Extraktor, reqwest-Client verwendet .json::<T>() zum Deserialisieren von Antworten; generierte Structs sind bidirektional kompatibel.

// Cargo.toml
// [dependencies]
// axum = "0.7"
// tokio = { version = "1", features = ["full"] }
// serde = { version = "1", features = ["derive"] }
// serde_json = "1"
// reqwest = { version = "0.12", features = ["json"] }

use axum::{routing::get, Json, Router};
use serde::{Deserialize, Serialize};

// Auto-generiert von diesem Tool
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Address {
    city: String,
    zip: String,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct User {
    id: i64,
    name: String,
    email: String,
    address: Address,
    tags: Vec<String>,
}

// axum-Handler: gibt JSON-Antwort zurück
async fn get_user() -> Json<User> {
    Json(User {
        id: 1,
        name: "Alice".into(),
        email: "a@b.com".into(),
        address: Address { city: "Beijing".into(), zip: "100000".into() },
        tags: vec!["rust".into(), "axum".into()],
    })
}

// reqwest-Client: Remote-API-Antwort deserialisieren
async fn fetch_user(url: &str) -> Result<User, reqwest::Error> {
    let user: User = reqwest::get(url).await?.json().await?;
    Ok(user)
}

#[tokio::main]
async fn main() {
    // axum-Dienst starten
    let app = Router::new().route("/user", get(get_user));
    let listener = tokio::net::TcpListener::bind("127.0.0.1:8080").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}

/*
 * Nach dem Build besuchen:
 * curl http://127.0.0.1:8080/user
 * {"id":1,"name":"Alice","email":"a@b.com",
 *  "address":{"city":"Beijing","zip":"100000"},
 *  "tags":["rust","axum"]}
 */

Häufig gestellte Fragen

Wie konvertiere ich JSON in eine Rust struct?

Fügen Sie JSON-Inhalt in den linken Editor ein oder klicken Sie auf die Schaltfläche zum Hochladen, um eine .json/.txt-Datei auszuwählen. Sie können auch auf «Beispiel» klicken, um das integrierte Beispiel zu laden. Das Tool ruft automatisch quicktype-core innerhalb von 400ms auf, um Rust-Code zu generieren, und zeigt Serde-abgeleitete Structs rechts an. Wenn das JSON fehlerhaft ist, klicken Sie auf die Schaltfläche «JSON reparieren», um es vor der Konvertierung automatisch zu reparieren.

Enthält der generierte Rust-Code Serde-Annotationen?

Ja. Das Tool verwendet den just-types-Rendermodus von quicktype-core und generiert use serde::{Serialize, Deserialize}; und #[derive(Serialize, Deserialize)] für Rust, direkt verwendbar mit serde_json zur Deserialisierung. Wenn Sie Serde nicht benötigen, können Sie die derive- und use-Anweisungen manuell entfernen.

Welche JSON-Datenstrukturen werden unterstützt?

Alle gültigen JSON-Strukturen werden unterstützt: Grundtypen (null, boolean, number, string), Arrays (eindimensional oder mehrdimensional), verschachtelte Objekte (beliebige Tiefe). JSON-Objekte generieren eine Root-struct; JSON-Arrays generieren einen Root-Typ Vec<T>. Nicht-JSON-Werte wie JavaScript-Objektliterale, Funktionen, Symbol, undefined werden nicht unterstützt.

Wie werden JSON-Feldtypen Rust-Typen zugeordnet?

Zeichenfolgen werden zu String, Ganzzahlen zu i64, Gleitkommazahlen zu f64, Boolesche Werte zu bool, Arrays zu Vec<T>, verschachtelte Objekte zu unabhängigen struct, null zu Option<serde_json::Value>. Detaillierte Zuordnungsregeln finden Sie in der «Schnellreferenztabelle JSON-Typen zu Rust-Typen» unten.

Welchen Typ generieren Nullwerte?

Nullwerte in JSON generieren Option<serde_json::Value>, was bedeutet, dass das Feld fehlen oder einen unsicheren Typ haben kann. Wenn Sie den tatsächlichen Feldtyp bereits kennen, können Sie im Quell-JSON einen Beispielwert angeben (z.B. "field": "" leitet String ab) und ihn dann nach der Generierung je nach Geschäftsanforderungen in präzisere Typen wie Option<String>, Option<i64> ändern.

Werden Arrays zu Vec konvertiert?

Ja. JSON-Arrays werden einheitlich in Rusts generische Vec<T> konvertiert, wobei die Elementtypen automatisch aus dem ersten Array-Element abgeleitet werden. Zum Beispiel generiert ["a","b"] Vec<String>, [1,2,3] Vec<i64>, [{...},{...}] Vec<Item>. Leere Arrays [] werden standardmäßig zu Vec<serde_json::Value>, können nach der Generierung je nach Kontext manuell in bestimmte Typen geändert werden.

Wie werden verschachtelte Objekte behandelt?

Jedes verschachtelte Objekt generiert eine unabhängige struct, benannt nach Großschreibung des ersten Buchstabens des Feldnamens. Wenn das Root-Objekt beispielsweise ein address-Feld enthält, werden sowohl Root- als auch Address-structs generiert, auf die in Root über address: Address verwiesen wird. Objekte mit gleicher Struktur verwenden denselben Typ wieder, um doppelte Definitionen zu vermeiden.

Kann ich den generierten Struct-Namen anpassen?

quicktype-core verwendet standardmäßig den JSON-Quellnamen (wie User) als Root-struct-Namen. Sie können Struct-Namen und Referenzstellen nach der Generierung manuell ändern. Der Dateiname der heruntergeladenen .rs-Datei kann beim Speichern ebenfalls nach Bedarf umbenannt werden. Wenn das Tool automatisch nach einem bestimmten Feld benennen soll, passen Sie den obersten JSON-Schlüssel vor dem Einfügen an.

Kann der generierte Code direkt in einem Cargo-Projekt verwendet werden?

Ja, er kann direkt verwendet werden, aber stellen Sie sicher, dass das Projekt serde- und serde_json-Abhängigkeiten hinzugefügt hat. Fügen Sie in Cargo.toml serde = { version = "1", features = ["derive"] } und serde_json = "1" hinzu, dann können Sie serde_json::from_str::<User>(&json) oder serde_json::from_reader(reader) verwenden, um die generierten structs zu deserialisieren.

Kann es für Actix-web/axum-Request-Bodys verwendet werden?

Ja. Sowohl die JSON-Extractor von Actix-web 4.x als auch axum 0.7+ basieren auf serde_json; die generierte struct dient direkt als Handler-Parameter. Beispiel in axum: async fn create_user(Json(payload): Json<CreateUserRequest>) -> ...; in Actix-web: web::Json<CreateUserRequest>. Keine zusätzlichen Annotationen erforderlich.

Kann es für reqwest-Antwortdeserialisierung verwendet werden?

Ja. reqwests response.json::<T>() ruft intern serde_json auf; übergeben Sie den generierten Struct-Typ: let user: User = reqwest::get(url).await?.json().await?;. Wenn Backend-API-Felder snake_case sind, während Rust-Felder camelCase sind, fügen Sie manuell #[serde(rename = "user_name")] hinzu.

Unterstützt es Tauri-Befehlsparameter?

Ja. Tauri-Befehlsfunktionsparameter werden über serde deserialisiert; verwenden Sie die generierte struct als Parametertyp: #[tauri::command] fn create_user(payload: CreateUserRequest) -> Result<User, String>. Wenn das Frontend-JS invoke('create_user', payload) aufruft, wird payload automatisch zu JSON serialisiert und dann auf Rust-Seite deserialisiert.

Unterstützt es präzise Typen wie chrono::DateTime und uuid::Uuid?

Das Tool generiert standardmäßig Grundtypen wie String und i64. Wenn Sie semantische Typen wie chrono::DateTime<Utc>, uuid::Uuid, url::Url, std::net::IpAddr benötigen, passen Sie die Feldtypen nach der Generierung manuell an. Diese Typen implementieren alle Serde's Deserialize; verwenden Sie einfach chrono::{DateTime, Utc}; und sie kompilieren.

Werden Daten an Server hochgeladen? Ist die Privatsphäre sicher?

Läuft vollständig in Ihrem lokalen Browser. JSON-Parsing, Rust-Codegenerierung und Dateidownloads erfolgen alle im Browser über JavaScript und quicktype-core Web Worker; weder eingegebene JSON-Daten noch generierter Rust-Code werden an einen Server hochgeladen, noch in der Cloud protokolliert oder zwischengespeichert. Vertrauliches JSON mit API-Schlüsseln, Tokens oder nicht veröffentlichten Geschäftsfeldern ist sicher verwendbar; Daten werden beim Schließen der Seite gelöscht.

Muss ich mich registrieren oder anmelden?

Nein. Das Tool ist vollständig kostenlos, keine Registrierung, Anmeldung oder Autorisierung erforderlich. Seite öffnen und verwenden; alle Funktionen sind lokal in Ihrem Browser verfügbar.

Was ist, wenn die JSON-Formatierung falsch ist?

Das Tool erkennt automatisch die JSON-Gültigkeit; bei Fehlern erscheint rechts eine rote Fehlermeldung mit einer Schaltfläche «JSON reparieren». Beim Klicken werden häufige Fehler automatisch behoben: abschließende Kommas, einfache Anführungszeichen durch doppelte ersetzt, fehlende Anführungszeichen für Schlüssel ergänzt, Kommentare entfernt usw. Nach erfolgreicher Reparatur generiert es weiter Rust-Code.

Verursacht die Konvertierung großer JSONs Verzögerungen?

Es gibt keine explizite Zeilenbegrenzung, aber Browser-Parsing und -Rendern sehr großer JSONs werden langsamer. Empfehlungen: ① Teilen Sie JSON und konvertieren Sie stapelweise; ② Konzentrieren Sie sich jeweils auf eine Verschachtelungsebene; ③ Wenn Sie 100+ Structs stapelweise generieren müssen, verwenden Sie das quicktype-CLI-Tool (npm i -g quicktype) oder IDE-Plugins.

Was ist der Unterschied zwischen diesem Tool und JSON zu TypeScript?

Beide konvertieren JSON in Typdefinitionen der Zielsprache, aber die Ausgabeformen unterscheiden sich: JSON zu Rust generiert Serde-abgeleitete Structs, die zur Laufzeit deserialisierbare Datenmodelle sind; JSON zu TypeScript generiert interface/type-Deklarationen, die nur zur Kompilierzeit-Typprüfung verwendet werden. Wählen Sie je nach Tech-Stack und Laufzeitszenario.

Kann der generierte Code in no_std eingebetteten Umgebungen verwendet werden?

Die Struct-Definitionen selbst können no_std sein (abhängen nur von core, nicht von std). Aber serde_json unter no_std erfordert die Verwendung von serde_json::de::from_slice und die Aktivierung entsprechender Features und kann String nicht verwenden (muss durch &str oder heapless::String ersetzt werden). In eingebetteten Szenarien müssen Sie normalerweise Feldtypen und Allokatoren manuell anpassen.

Warum unterscheiden sich generierte Feldnamen von JSON?

Das Tool behält ursprüngliche JSON-Feldnamen bei (einschließlich snake_case); Rust-Felder folgen standardmäßig der snake_case-Namenskonvention, sodass bei Übereinstimmung mit JSON-Namen keine Inkonsistenzen auftreten. Wenn Feldunterschiede auftreten, liegt das normalerweise daran, dass das Quell-JSON Sonderzeichen enthält oder doppelte Schlüssel zusammengeführt wurden; wir empfehlen, vor der Konvertierung in einem JSON-Reparaturtool zu bereinigen.

Fehlerbehebung

Zeigt «Bitte JSON-Daten eingeben» oder rechte Seite ist leer

Zeigt JSON-Parsing fehlgeschlagen (Unexpected token)

Glossar

struct
Schlüsselwort in Rust zum Definieren zusammengesetzter Datentypen. Dieses Tool generiert structs, z.B. pub struct User { id: i64, name: String }. Felder sind standardmäßig öffentlich (ohne Sichtbarkeit sind sie privat; serde derive erfordert öffentlich).
Serde
Das beliebteste Serialisierungs-/Deserialisierungsframework im Rust-Ökosystem. Von diesem Tool generierter Code arbeitet mit Serde über #[derive(Serialize, Deserialize)], verwendbar mit serde_json, bincode, toml, postcard und anderen Formaten.
derive-Makro
Rust-Prozedurmakro, das automatisch Traits für Typen implementiert. #[derive(Serialize, Deserialize)], das von diesem Tool generiert wird, implementiert automatisch die Serialisierungs- und Deserialisierungs-Traits von Serde, ohne manuell geschriebene impl-Blöcke.
Vec<T>
Dynamischer Array-Typ in der Rust-Standardbibliothek. Dieses Tool ordnet JSON-Arrays automatisch Vec<T> zu, z.B. werden Zeichenfolgenarrays zu Vec<String>. Vec besitzt heap-allozierten Speicher, wobei die Lebensdauer automatisch vom Rust-Compiler verwaltet wird.
Option<T>
Optionaler Werttyp in der Rust-Standardbibliothek, der angibt, dass ein Wert möglicherweise nicht existiert. Dieses Tool ordnet JSON-null Option<serde_json::Value> zu; Sie können manuell in präzisere Typen wie Option<String> ändern, konsumiert über .unwrap() oder Pattern-Matching.
Cargo
Rusts offizielles Build-System und Paketmanager. Bei der Verwendung von durch dieses Tool generiertem Code müssen Sie serde- und serde_json-Abhängigkeiten in Cargo.toml deklarieren und cargo build/cargo run zum Kompilieren und Ausführen ausführen.
serde_json
Serde-Framework-Crate speziell für die JSON-Verarbeitung. Typische Verwendung ist serde_json::from_str::<User>(&json_string) oder serde_json::from_reader(reader), um JSON-Strings/Byte-Streams in generierte Rust-Structs umzuwandeln; es ist die zugrundeliegende Abhängigkeit für Actix-web/axum-JSON-Verarbeitung.
Serialize
Serialisierungs-Trait von Serde, der angibt, dass ein Typ in Formate wie JSON kodiert werden kann. Dieses Tool generiert automatisch Implementierungen über derive, verwendbar für serde_json::to_string(&user), um Rust-Werte zurück in JSON-Strings umzuwandeln.
Deserialize
Deserialisierungs-Trait von Serde, der angibt, dass ein Typ aus Formaten wie JSON dekodiert werden kann. Dieses Tool generiert automatisch Implementierungen über derive, verwendet mit serde_json::from_str; es ist der Kern der Deserialisierung von HTTP-Request-Bodys, Konfigurationsdateien und Message-Queue-Payloads.
Ownership
Rusts Kernkonzept der Speicherverwaltung. Typen wie String und Vec<T>, die von diesem Tool generiert werden, besitzen ihre jeweiligen Daten; nach der Deserialisierung werden Lebensdauern automatisch vom Rust-Compiler verwaltet, ohne manuelles Freigeben, ohne GC, ohne Laufzeit-Overhead.
#[serde(rename = "...")]
Serde-Feldumbenennungsattribut. Wenn JSON-Feldnamen (wie user_name) nicht mit dem Rust-Namensstil übereinstimmen, teilt diese Annotation Serde mit, bei der Deserialisierung nach dem ursprünglichen JSON-Namen zu suchen. Häufig verwendet für camelCase-Rust-Projekte, die mit snake_case-Backend-APIs verbunden sind.
#[serde(default)]
Serde-Feldstandardwertattribut. Wenn ein Feld in JSON fehlt, ruft es Default::default() des Typs auf. Häufig verwendet für Abwärtskompatibilität mit neu hinzugefügten Feldern in Versionsiterationen, vermeidet Deserialisierungsfehler für alte JSON.
quicktype-core
Mehrsprachige Typerkennungs- und Codegenerierungsbibliothek, die von diesem Tool im Hintergrund verwendet wird, ursprünglich in TypeScript implementiert, zu WebAssembly kompiliert und im Browser über Web Worker ausgeführt, unterstützt 20+ Zielsprachen einschließlich Rust/TypeScript/Go/Python.
Web Worker
Vom Browser bereitgestellter Hintergrund-Thread-Mechanismus, der es JavaScript ermöglicht, teure Berechnungen in einem unabhängigen Thread auszuführen, ohne den Hauptthread zu blockieren. Dieses Tool verwendet Web Worker, um quicktype-core-WASM zu laden, und verhindert Seiteneinfrierungen bei großen JSON-Konvertierungen.
WebAssembly (WASM)
Binäres Befehlsformat, das aus C/C++/Rust-Kompilierung generiert werden kann und in Browsern mit nahezu nativer Geschwindigkeit ausgeführt werden kann. Die Kernengine dieses Tools, quicktype-core, ist zu WASM kompiliert und läuft im Browser.
chrono
Beliebteste Datums-/Zeitbibliothek im Rust-Ökosystem, bietet Typen wie DateTime<Utc>, NaiveDate; die Aktivierung des serde-Features ermöglicht automatisches Parsen von ISO 8601-Zeitzeichenfolgen mit Serde. Häufig verwendet, um von diesem Tool generierte Standard-String-Zeitfelder zu ersetzen.
no_std
Ein Rust-Kompilierungsmodus, der die Standardbibliothek std deaktiviert und nur die Kernbibliothek core verwendet, geeignet für ressourcenbeschränkte Szenarien wie eingebettete Systeme, WebAssembly-Kernel, Betriebssysteme. serde funktioniert auch unter no_std (bei entsprechender Aktivierung von Features).
tokio
Beliebteste Async-Runtime im Rust-Ökosystem, von gängigen Bibliotheken wie axum, reqwest, tonic abhängig. Durch dieses Tool generierter Code wird häufig mit dem Makro #[tokio::main] verwendet, um die Runtime in asynchronen Szenarien zu starten.

Schnellreferenztabelle JSON-Typen zu Rust-Typen

Das Tool leitet automatisch entsprechende Rust-Typen entsprechend dem Typ des JSON-Werts ab:

JSON-WertbeispielGenerierter Rust-TypBeschreibung
nullOption<serde_json::Value>Nullwerttyp ungewiss; umschließt serde_json::Value mit Option als Fallback
true / falseboolJSON-Boolesche Werte werden direkt Rust bool zugeordnet
42i64JSON-Ganzzahlen standardmäßig i64 (nach Bedarf manuell in u32/usize ändern)
3.14f64JSON-Gleitkommazahlen standardmäßig f64 (f64 für Hochpräzisionsszenarien empfohlen)
"hello"StringJSON-Zeichenfolgen werden Rust String zugeordnet (können manuell in &str/chrono::DateTime/uuid::Uuid geändert werden)
["a","b"]Vec<String>Zeichenfolgenarrays werden zu Vec<String>
[1,2,3]Vec<i64>Ganzzahl-Arrays werden zu Vec<i64>
[{...},{...}]Vec<Item>Objektarrays generieren entsprechende Struct aus erstem Element, dann mit Vec umschlossen
[]Vec<serde_json::Value>Leere Arrays können Elementtyp nicht ableiten; verwenden serde_json::Value als Fallback, empfehlen manuelle Änderung zu konkretem Typ nach Generierung
{...} verschachteltes ObjektUnabhängige structVerschachtelte Objekte generieren unabhängige structs, Feldnamen großgeschrieben (z.B. address→Address)
{ "key": null }Option<serde_json::Value>Wenn Feldwert null ist, standardmäßig Option<serde_json::Value>; kann manuell in Option<String> geändert werden

Privacy & Security

Alle Operationen dieses JSON-zu-Rust-Tools erfolgen vollständig lokal in Ihrem Browser: JSON-Parsing, Rust-Codegenerierung und Dateidownloads werden alle clientseitig über das quicktype-core-WebAssembly-Modul ausgeführt; kein JSON-Inhalt, keine hochgeladenen Dateien oder generierter Code werden über das Netzwerk an einen Server gesendet. Dateiuploads verwenden die native FileReader-API des Browsers, um direkt in den Speicher zu lesen, ohne zwischengeschaltete Dienste zu durchlaufen. Kein Cookie-Tracking, keine Benutzereingaben oder Nutzungsdaten werden gesammelt. Nach dem Schließen oder Aktualisieren der Seite werden alle Ein- und Ausgaben automatisch aus dem Speicher gelöscht. Geeignet für die Verarbeitung von JSON mit API-Schlüsseln, Tokens, Benutzerdatenschutzdaten, nicht veröffentlichten Geschäftsstrukturen und internen Schnittstellenfeldern.

Authoritative References