JSON a structs de Rust (serde)
Genera structs de Rust con derives Serialize/Deserialize de serde, campos en snake_case, atributos rename, Option para null y Vec para arrays a partir de JSON. Gratis.
Requiere los crates serde (con derive) y serde_json. Los campos van en snake_case con #[serde(rename)] cuando la clave JSON es distinta.
Se ejecuta completamente en tu navegador. Tus datos nunca se suben.
Herramientas Relacionadas
Ver Todas¿Qué es JSON a Rust?
Pega JSON y obtén definiciones struct de Rust que lo deserializan con serde. Cada struct deriva Debug, Clone, Serialize, Deserialize; los nombres de campo están en snake_case y conservan la clave original con #[serde(rename = "…")] cuando hace falta.
Cómo usar JSON a Rust
- Pega un ejemplo JSON en Entrada JSON (o haz clic en Cargar ejemplo / Abrir archivo).
- Fija el Nombre del tipo raíz (por defecto
Root). - Copia el código Rust generado o haz clic en Descargar para guardarlo como archivo.
Ejemplo
{"id":1,"name":"A","tags":["x"]} use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
pub id: i64,
pub name: String,
pub tags: Vec<String>,
} Cuándo usar JSON a Rust
Úsalo al escribir un cliente o una CLI en Rust que lea JSON. Afina después los tipos (por ejemplo, u32 para recuentos pequeños o tipos de chrono para marcas de tiempo), porque un ejemplo no puede indicarte los rangos reales.
Cómo funciona JSON a Rust
El ejemplo se recorre de forma recursiva y cada posición acumula los tipos que ha visto. Los arrays de objetos se fusionan en un solo tipo: una clave que falta en algunos elementos pasa a ser opcional, una clave que es null en algún sitio pasa a ser anulable, los enteros mezclados con decimales se convierten en un tipo de coma flotante y cualquier otra mezcla de tipos recurre a un tipo dinámico. Los objetos anidados se convierten en tipos con nombre propio (PascalCase de la clave, claves de array en singular: orders → Order), con sufijos numéricos si los nombres coinciden. La salida Rust convierte enteros en i64, decimales en f64, cadenas en String, booleanos en bool, arrays en Vec<T>, valores anulables en Option<T> y valores dinámicos o solo null en serde_json::Value. Los campos que faltan en algunos ejemplos pasan a ser Option<T> con #[serde(default, skip_serializing_if = "Option::is_none")]. Las palabras reservadas como type se escriben como identificadores en bruto (r#type).
Casos de Uso Comunes
- Deserializar la respuesta de una API REST con reqwest + serde
- Modelar un archivo de configuración JSON para una herramienta CLI
- Crear tipos para un manejador de webhooks
- Convertir fixtures para pruebas de integración en Rust
Preguntas Frecuentes
¿Qué crates necesito?
serde con la feature derive y serde_json: serde = { version = "1", features = ["derive"] } y serde_json = "1".
¿Por qué serde_json::Value?
Se usa cuando una clave mezcla tipos o es siempre null en el ejemplo, de modo que no se puede elegir con seguridad un tipo Rust concreto.
¿Por qué r#type?
type es una palabra reservada de Rust; la sintaxis de identificador en bruto permite usarla como nombre de campo y serde sigue asociándola a la clave JSON.