Herramienta de Tool Kumar
JSON a structs Rust
Genera structs públicos de Rust con derive de Debug, Clone, Serialize y Deserialize. Las claves JSON se convierten en campos snake_case con atributos rename de serde cuando el nombre original difiere.
Cómo usar esta herramienta
- Pega una respuesta representativa que incluya registros cuyos campos difieran.
- Revisa la salida generada y cambia el nombre raíz si es necesario.
- Copia o descarga el código y comprueba después los tipos con el contrato de tu API.
Ejemplo práctico
Esta salida procede del conversor integrado. Los dos precios permiten inferir un campo de coma flotante; los valores null y de cadena de note permiten inferir un campo que admite null.
Entrada
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}Salida
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
#[serde(rename = "user-id")]
pub user_id: i64,
pub profile: Profile,
pub items: Vec<Item>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Profile {
pub city: String,
pub created_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Item {
pub price: f64,
pub note: Option<String>,
}
Usar los structs con serde_json
Activa la característica derive de la dependencia serde y añade serde_json en Cargo.toml. Copia los structs en un módulo y deserializa la respuesta.
La inferencia a partir de ejemplos no establece reglas de validación para la aplicación. Comprueba los rangos, los campos obligatorios y las marcas de tiempo antes de considerar el modelo decodificado como una entrada de confianza.
let model: Root = serde_json::from_str(&response_body)?;
let text = serde_json::to_string(&model)?;Opciones y casos especiales
- Los arrays se convierten en Vec y los campos tipados que admiten null, en Option. Los campos ausentes en algunos registros añaden skip_serializing_if = "Option::is_none".
- Los valores desconocidos, los que solo son null o los que mezclan tipos usan serde_json::Value. Los cambios de nombre conservan la puntuación y las palabras reservadas de Rust usan identificadores raw cuando es posible.
- Los enteros usan i64 o i128 si superan el rango de 64 bits con signo. Las fracciones usan f64. Revisa la compatibilidad de serde_json y el rango numérico antes de aceptar enteros muy grandes.
- Las fechas siguen siendo String. Los importes decimales exactos necesitan un tipo de dominio y un serializador; un ejemplo JSON no puede proporcionar esas reglas.
Privado por defecto
Tu documento permanece en este navegador. Tool Kumar analiza, convierte y crea las descargas en tu dispositivo, sin cuenta ni pasos para subir archivos.
Preguntas sobre JSON a structs Rust
- ¿El generador incluye el derive de serde?
- Sí. Importa serde::{Deserialize, Serialize} y deriva Debug, Clone, Serialize y Deserialize para los structs.
- ¿Se conservan los nombres JSON?
- Sí. Genera atributos rename de serde cuando es necesario y puede usar rename_all = "camelCase" cuando eso reduce los mapeos individuales por campo.
- ¿Cómo se representan los valores null y los ausentes?
- Los campos tipados que admiten null o están ausentes usan Option<T>. Los campos desconocidos y los que solo contienen null usan serde_json::Value, que también puede contener null de JSON.
- ¿Puedo deserializar el resultado con serde_json?
- Sí. Añade serde con la característica derive y serde_json a tu proyecto Rust y deserializa después al tipo Root generado.