Convertir JSON a Rust — Generador de structs serde
Convierte JSON a structs de Rust en línea con derives serde Serialize/Deserialize, Option<T> para campos opcionales y nombres snake_case. Gratis, en tu navegador.
🔒 Se ejecuta completamente en tu navegador — nada se subeStructs de Rust para serde, generadas desde JSON
Serde hace que el JSON en Rust sea rápido y seguro, pero solo cuando ya has escrito structs que coinciden exactamente con los datos. Este conversor de JSON a Rust las escribe por ti. Pega un ejemplo y cada objeto se convierte en una struct que deriva Serialize y Deserialize, las claves pasan a ser nombres de campo snake_case idiomáticos con atributos #[serde(rename)] donde hace falta, los objetos anidados se convierten en structs independientes, los arrays en Vec<T> y los valores que faltan o son null en algún punto del ejemplo se envuelven en Option<T>. Los enteros y los decimales se distinguen como i64 y f64.
El generador está construido sobre quicktype, que combina todos los elementos de cada array antes de elegir un tipo. En Rust esto importa más que en la mayoría de lenguajes: una sola clave inesperada o un solo null hace fallar la deserialización, así que capturar de entrada los campos opcionales ahorra tiempo de depuración.
Visibilidad y derives
Elige la visibilidad de los campos según cómo se vayan a usar los tipos: pub para un crate de modelos compartido, pub(crate) para módulos internos o campos privados si quieres añadir tus propios constructores. Los derives Debug y Clone vienen activados por defecto porque casi todos los modelos los necesitan; desactívalos para una salida más ligera. Activa Skip serializing None para añadir skip_serializing_if y que los campos None desaparezcan del JSON de salida en lugar de escribirse como null. Recuerda añadir serde con la feature derive y serde_json a tu Cargo.toml.
Cómo obtener tipos precisos
Usa un ejemplo con varios elementos por array y campos opcionales rellenos. Los arrays vacíos y los null no aportan información de tipo y recurren a serde_json::Value, que normalmente querrás sustituir. Tras generar, ejecuta rustfmt, revisa el ancho de los enteros (un ID quizá quepa en u32) y convierte en enums, con #[serde(rename_all)], los campos de cadena que tengan un conjunto fijo de valores. Todo se ejecuta en local en tu navegador, así que los payloads privados nunca se suben.
Cómo usar
- Pega el JSONPega un documento JSON o haz clic en Load sample.
- Ajusta los derivesDefine el nombre de la struct raíz, la visibilidad de los campos y los traits que se derivan.
- Copia las structsCopia el código Rust o descarga un archivo .rs y añade serde a Cargo.toml.
Preguntas frecuentes
¿Funciona la salida con serde?
Serialize y Deserialize, y los campos llevan #[serde(rename = "...")] siempre que el nombre en Rust difiera de la clave JSON.¿Cómo se representan los campos opcionales?
Option<T>. Marca Skip serializing None para omitirlos al serializar.¿Puedo cambiar la visibilidad de los campos?
pub, pub(crate) o privados, y activa o desactiva los derives Debug y Clone.