← Todas las herramientas Code Gen

Generador de Structs Rust desde JSON

Pega JSON y obtén structs Rust idiomáticas con derives de serde listas para producción.

0 car.

100% del lado del cliente

Toda la conversión se ejecuta en tu navegador. Tus datos nunca se envían a ningún servidor.

Structs Rust y Serde

Serde es el estándar de facto para la serialización JSON en Rust. El generador produce definiciones de struct decoradas con #[derive(Debug, Clone, Serialize, Deserialize)] — la combinación de derives más común para structs de datos. Se asume serde_json como runtime, por lo que el código generado funciona con serde_json::from_str y serde_json::to_string directamente.

El mapeo de tipos sigue los idiomas de Rust: las cadenas JSON se convierten en String, los enteros en i64, los decimales en f64, los booleanos en bool y los arrays en Vec<T>. Los objetos anidados generan structs con nombre separadas. Los campos que son null en el JSON o ausentes en algunos objetos del array se tipan como Option<T>, con un atributo #[serde(skip_serializing_if = "Option::is_none")] para omitirlos cuando son None.

Los nombres de campo en Rust usan snake_case, mientras JSON comúnmente usa camelCase. El generador emite #[serde(rename = "originalKey")] en campos cuyo nombre Rust difiere de la clave JSON, y opcionalmente un atributo de contenedor #[serde(rename_all = "camelCase")].

Ownership, lifetimes y rendimiento

La salida por defecto usa tipos String propios para campos de texto, lo que significa que la struct posee todos sus datos y puede moverse y almacenarse libremente. Un modo alternativo "prestado" reemplaza String por &str (con un parámetro de lifetime), evitando la asignación al deserializar desde un buffer ya propio.

Para documentos JSON grandes, serde_json soporta deserialización en streaming via serde_json::Deserializer::from_reader. Las structs generadas son completamente compatibles con streaming ya que el diseño basado en traits de serde es agnóstico a la fuente de datos.

El exhaustivo pattern matching de Rust significa que añadir un nuevo campo a una respuesta JSON no romperá silenciosamente el código existente. El atributo #[serde(deny_unknown_fields)] puede añadirse para capturar claves JSON inesperadas.

Flujos de trabajo de desarrollo Rust

Los desarrolladores backend Rust que usan Axum, Actix-web o Warp necesitan modelos de solicitud y respuesta tipados. El generador produce structs que funcionan directamente con el extractor Json<T> de Axum.

Las herramientas CLI y scripts de procesamiento de datos en Rust a menudo parsean archivos de configuración JSON o respuestas de API. El generador bootstrapea las definiciones de struct para que puedas concentrarte en la lógica de negocio.

Los proyectos WebAssembly (WASM) que llaman a APIs de JavaScript a menudo reciben datos JSON. Las structs serde generadas son compatibles con wasm-bindgen y serde-wasm-bindgen.

FAQ

¿Se envían mis datos a un servidor?

No. Todo el procesamiento se ejecuta completamente en tu navegador. Tu JSON nunca sale de tu dispositivo.

¿Qué dependencias de Cargo necesito?

Añade serde = { version = "1", features = ["derive"] } y serde_json = "1" a tu Cargo.toml. El código generado solo importa estos dos crates.

¿Cómo se manejan las palabras reservadas de Rust como nombres de campo?

Las palabras reservadas de Rust como "type", "match", "use" y "ref" se prefijan con r# (sintaxis de identificador raw, ej. r#type) y un atributo #[serde(rename = "type")] preserva la clave JSON original.

¿Puedo generar enums para tipos de unión de cadenas?

El generador básico produce structs. Para campos JSON que actúan como enums discriminados, puedes reemplazar manualmente el campo String por un enum Rust con #[derive(Deserialize)].

¿Se admiten estructuras profundamente anidadas?

Sí. Cada objeto JSON anidado se convierte en su propia struct con nombre. Todas las structs se emiten en un único archivo en orden de dependencia.

Herramientas relacionadas