UTILS.
100% en el navegador
🦀

JSON a structs Serde de Rust

Genera structs de Rust con derives de serde desde una muestra JSON, listos para Serialize/Deserialize, con Option para campos anulables y atributos rename.

salida

Acerca de esta herramienta

La herramienta JSON a structs Serde de Rust convierte una muestra JSON pegada en structs de Rust anotados para serde, para que puedas deserializar el mismo payload sin escribir a mano cada campo. Analiza el JSON, infiere tipos de Rust de forma recursiva y emite un struct #[derive(Serialize, Deserialize, ...)] por objeto: las cadenas pasan a String, los enteros a i64 (o u64 cuando todas las muestras son no negativas), otros números a f64, los booleanos a bool, los arrays a Vec<T>, y los objetos anidados a sus propios structs en PascalCase definidos antes que sus padres.

Todo el trabajo ocurre localmente en tu navegador con JSON.parse y JavaScript plano: nada se sube. Los campos del struct se convierten a snake_case, y siempre que una clave JSON difiera del campo snake_case la herramienta añade #[serde(rename = "originalKey")] para que el struct siga mapeando al formato de transmisión. Las claves ausentes en algunas muestras hermanas, o vistas como null, pasan a Option<T> con #[serde(default)] para que la deserialización tolere su ausencia. Los arrays vacíos recurren a Vec<serde_json::Value>.

El interruptor de ancho de entero alterna entre enteros de 64 bits (i64/u64, por defecto) y de 32 bits (i32/u32), promoviendo a 64 bits automáticamente cuando un valor de muestra excede el rango de 32 bits. El interruptor de derive elige entre el conjunto completo (Serialize, Deserialize, Debug, Clone) y un mínimo Serialize, Deserialize. El archivo comienza con use serde::{Serialize, Deserialize};. Cópialo o descarga un archivo .rs.

Preguntas frecuentes

¿Cómo se mapean los tipos JSON a Rust?
string a String, entero a i64 (o u64 cuando toda muestra es no negativa), número no entero a f64, booleano a bool, array a Vec<T>, y objeto a un struct con nombre con derives de serde. Los campos null o ausentes pasan a Option<T> con #[serde(default)].
¿Cuándo se añade #[serde(rename)]?
Siempre que la clave JSON no sea igual a su nombre de campo snake_case: por ejemplo una clave userName produce el campo user_name con #[serde(rename = "userName")], para que el struct siga deserializando el JSON original exactamente.
¿Puedo elegir el ancho del entero?
Sí. El interruptor de ancho emite enteros de 64 bits (i64/u64) o de 32 bits (i32/u32). El signo sigue a los datos: las muestras todas no negativas usan el tipo sin signo. Los valores más allá del rango de 32 bits se promueven a 64 bits automáticamente.
¿Qué derives se incluyen?
Por defecto es #[derive(Serialize, Deserialize, Debug, Clone)]; la opción mínima emite solo Serialize, Deserialize. Los structs hijos se declaran antes que los padres que los referencian, para que el módulo compile tal cual.

Más herramientas