logo
GeekFormat

JSON a Rust

Eina en línia gratuïta JSON a Rust. Enganxa JSON de resposta d'API per generar automàticament structs amb derive Serde, objectes anidats dividits independentment, Vec i Option deduïts intel·ligentment, conversió local pura al navegador, sense necessitat de registre.

Relacionats

Sobre JSON a Rust: Convertir dades JSON en structs Rust compilables

JSON a Rust és el procés de convertir dades en format JSON en definicions de tipus struct Rust.

Aquesta eina s'executa localment al navegador basada en quicktype-core.

La inferència de tipus és el cor de JSON a Rust.

Tots els càlculs passen al navegador, cap dada s'envia a servidors.

El codi generat s'utilitza típicament en projectes Cargo.

El codi generat automàticament és un punt de partida, no un punt final.

Casos d'ús

  • Integració REST API
  • Desenvolupament backend Actix-web
  • Desenvolupament backend axum
  • Definició d'interfície de microserveis
  • Desenvolupament d'eines CLI
  • Projectes WebAssembly
  • Apps d'escriptori Tauri
  • Parsing de dades de web scraper
  • Desenvolupament de jocs
  • IoT i sistemes encastats
  • Migració de bases de dades
  • Blockchain/Web3
  • Construcció de dades de prova
  • Parsing de logs estructurats
  • Migració de centre de configuració
  • Col·laboració cross-language
  • Manteniment SDK open source
  • Exemples didàctics Rust
  • Conversió de noms de camp

Com usar-ho

  1. Enganxa JSON a l'editor de l'esquerra o carrega un fitxer
  2. Espera 400ms per a la conversió automàtica
  3. Si el JSON està mal format fes clic a «Repara JSON»
  4. Fes clic a «Copiar» o «Descarrega» per guardar el fitxer .rs
  5. Afegeix dependències serde i serde_json a Cargo.toml
  6. (Opcional) Ajusta manualment els tipus de camp

Característiques

  • Conversió local al navegador
  • Sortida preparada per a Serde
  • Inferència intel·ligent de tipus
  • Divisió automàtica d'objectes anidats
  • Gestió automàtica de Vec i Option
  • Llest per a Actix-web/axum/reqwest
  • Auto-conversió amb debounce de 400ms
  • Correcció d'errors JSON en un clic
  • Copiar i descarregar
  • Historial localStorage
  • Panells dividits responsius
  • Dades d'exemple + càrrega de fitxers

Exemples de codi

Rust: Handler Actix-web rep cos de petició JSON

rust

Utilitza Actix-web 4.x amb la struct generada com a paràmetre web::Json<T>.

// 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};

#[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>,
}

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)
}

#[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
}

Rust: Rutes axum + parsing de resposta client reqwest

rust

El servidor axum utilitza l'extractor Json<T>, el client reqwest utilitza .json::<T>().

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

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

#[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> }

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()] })
}

#[tokio::main]
async fn main() {
    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();
}

Preguntes freqients

Com converteixo JSON a una struct Rust?

Enganxa JSON a l'editor de l'esquerra, l'eina genera automàticament codi Rust.

El codi Rust generat inclou anotacions serde?

Sí, inclou #[derive(Serialize, Deserialize)] i les instruccions use.

Quines estructures JSON són compatibles?

Totes les estructures JSON vàlides: tipus primitius, arrays, objectes anidats.

Com es mapegen els tipus JSON als tipus Rust?

Cadenes→String, enters→i64, floats→f64, booleans→bool, arrays→Vec<T>, objectes anidats→struct independent, null→Option<serde_json::Value>.

Quin tipus generen els valors null?

Els valors null generen Option<serde_json::Value>.

Els arrays es converteixen a Vec?

Sí, els arrays JSON es converteixen a Vec<T>.

Com es tracten els objectes anidats?

Cada objecte anidat genera una struct independent.

Puc personalitzar el nom de la struct generada?

Sí, modifica els noms manualment després de la generació.

El codi generat es pot utilitzar directament en un projecte Cargo?

Sí, afegeix serde i serde_json a Cargo.toml.

Es pot utilitzar per a Actix-web/axum?

Sí, directament com a paràmetre web::Json<T> o Json<T>.

Dóna suport a paràmetres de comandament Tauri?

Sí, utilitza com a tipus de paràmetre #[tauri::command].

Dóna suport a tipus precisos com chrono::DateTime?

Sí, modifica els tipus manualment després de la generació.

Les dades s'envien a servidors?

No, tot s'executa localment al navegador.

Cal registrar-se?

No, completament gratuït sense registre.

Solució de problemes

Mostra «Introdueix dades JSON» o costat dret buit

Mostra error de parsing JSON

Tipus de camp no prou precisos

Error de compilació crate serde/serde_json faltant

Glossari

struct
Paraula clau a Rust per definir tipus de dades compostos.
Serde
Framework de serialització/deserialització més popular a l'ecosistema Rust.
Vec<T>
Tipus d'array dinàmic a la biblioteca estàndard Rust.
Option<T>
Tipus de valor opcional a la biblioteca estàndard Rust.
Cargo
Sistema de build oficial i gestor de paquets de Rust.
serde_json
Crate del framework Serde específic per a processament JSON.
Serialize
Trait de serialització de Serde.
Deserialize
Trait de deserialització de Serde.
quicktype-core
Biblioteca d'inferència de tipus i generació de codi multillenguatge.
chrono
Biblioteca de data/hora més popular a l'ecosistema Rust.
no_std
Mode de compilació Rust que desactiva la biblioteca estàndard.
tokio
Runtime asíncron més popular a l'ecosistema Rust.

Taula de referència tipus JSON → tipus Rust

L'eina dedueix automàticament els tipus Rust corresponents:

Exemple JSONTipus Rust generatDescripció
nullOption<serde_json::Value>Valor null, Option com a fallback
true / falseboolBooleans JSON → bool
42i64Enters JSON → i64
3.14f64Floats JSON → f64
"hello"StringCadenes JSON → String
["a","b"]Vec<String>Arrays de cadenes → Vec<String>
[1,2,3]Vec<i64>Arrays d'enters → Vec<i64>
[{...},{...}]Vec<Item>Arrays d'objectes → Vec<Item>
[]Vec<serde_json::Value>Array buit
{...} objecte anidatstruct independentObjectes anidats generen struct independent

Privacy & Security

Totes les operacions d'aquesta eina JSON a Rust passen completament de forma local al navegador: el parsing JSON, la generació de codi Rust i la descàrrega de fitxers s'executen totes al costat del client mitjançant el mòdul WebAssembly quicktype-core; cap contingut JSON, fitxers carregats o codi generat s'envia per la xarxa a servidors.

Authoritative References