Generador de structs de Rust a partir de JSON
Genera definiciones de estructuras (structs) de Rust con las implementaciones derivadas `Serialize` y `Deserialize` de `serde` a partir de JSON. Infiere los tipos de Rust a partir de los valores JSON y genera estructuras idiomáticas listas para usar con `serde_json`.
Genera structs de Rust con atributos #[derive(Serialize, Deserialize)].
Asocia tipos JSON con tipos primitivos de Rust: String, i64, f64, bool, Vec<T>, Option<T>.
Utiliza atributos de renombrado de serde para asignar claves JSON a nombres de campo idiomáticos en Rust.
Crea definiciones de estructuras anidadas para objetos JSON anidados.
La salida está lista para usarse con serde_json::from_str y serde_json::to_string.
Cómo usarlo
Pega un objeto JSON en el campo de entrada.
El generador produce definiciones de estructuras de Rust con atributos de serde.
Añade serde y serde_json a tu Cargo.toml
Pega las estructuras en tu archivo fuente de Rust y úsalas con serde_json.
Desarrollo de API en Rust
- Deserializar respuestas de API REST con reqwest
- Define tipos de manejadores para Axum o Actix-Web
- Analizar archivos de configuración JSON en servicios Rust
Programación de sistemas
- Tipar eventos de telemetría JSON en workers de Rust
- Deserializar cargas útiles de webhook
- Analizar entradas de registro estructuradas
Ecosistema de Rust
- serde
- serde_json
- reqwest
- Axum
- actix-web
- Tokio
Utiliza Option<T> para campos JSON que puedan ser nulos o estar ausentes: se asigna a null en JSON al serializar y gestiona las claves faltantes al deserializar.
Añade `#[serde(rename_all = "camelCase")]` a la estructura en lugar de renombrar campo por campo si todas las claves JSON siguen el formato camelCase.
Para campos JSON desconocidos o dinámicos, añade un campo comodín: #[serde(flatten)] extra: HashMap<String, serde_json::Value>
Añade `#[serde(deny_unknown_fields)]` a las estructuras durante el desarrollo para detectar campos JSON inesperados en las respuestas de la API.
Utiliza #[serde(default)] para los campos opcionales a fin de gestionar los casos en los que la clave pueda estar totalmente ausente del objeto JSON.
Añade las derivaciones `Clone` y `Debug` junto a `Serialize` y `Deserialize` para las estructuras que se registrarán o clonarán en el código de la aplicación.
Preguntas frecuentes
Encuentra respuestas a las preguntas más comunes sobre nuestras herramientas y servicios.
Entender De JSON a struct de Rust
El modelo de propiedad y el estricto sistema de tipos de Rust lo convierten en uno de los lenguajes más seguros para gestionar datos externos no confiables, como respuestas de API en formato JSON y cargas útiles (*payloads*) de webhooks. El framework *serde* —abreviatura de serialización y deserialización— es el estándar *de facto* para el manejo de JSON en el ecosistema de Rust; ofrece una serialización altamente optimizada y verificada en tiempo de compilación mediante macros procedimentales de derivación. *serde_json*, el *backend* de JSON para *serde*, es uno de los paquetes (*crates*) más descargados en crates.io. Para los desarrolladores de Rust que crean clientes de API, servicios web o tuberías de procesamiento de datos, definir tipos de estructura (*structs*) precisos y anotados para *serde* a partir de ejemplos JSON es una tarea fundamental, y su generación automática a partir de muestras de datos reales acelera considerablemente el desarrollo.
Las macros de derivación de Serde (#[derive(Serialize, Deserialize)]) generan todo el código de serialización y deserialización en tiempo de compilación, basándose en la definición de la estructura y los atributos de sus campos. El atributo serde(rename) asigna los nombres de campo en formato *snake_case* (idiomático en Rust) a *camelCase* u otras convenciones de formato utilizadas por las API JSON. El atributo de estructura serde(rename_all) aplica una transformación de convención de nombres a todos los campos simultáneamente (por ejemplo, rename_all = "camelCase" convierte automáticamente todos los campos *snake_case* en claves JSON *camelCase*). La funcionalidad opcional omite los campos que no están presentes en el JSON que se está deserializando, mientras que el atributo default proporciona valores predeterminados para los campos ausentes. Estos atributos ofrecen a los desarrolladores un control preciso sobre el comportamiento de la serialización sin necesidad de escribir código de análisis manual.
El sistema de tipos de Rust expresa la semántica de opcionalidad y nulidad de JSON mediante el tipo enumerado `Option<T>`. Un campo JSON que puede ser nulo se mapea a `Option<T>`, donde `None` representa el valor nulo y `Some(value)` representa cualquier valor no nulo. `serde` gestiona este mapeo automáticamente: al serializar, `None` se convierte en `null`; al deserializar, `null` se convierte en `None`. Los campos que pueden estar totalmente ausentes del objeto JSON (en lugar de ser explícitamente nulos) también pueden utilizar `Option<T>` en combinación con el atributo `serde(skip_serializing_if = "Option::is_none")` para lograr un comportamiento limpio en los procesos de ida y vuelta (serialización y deserialización). Distinguir entre `null` (ausencia explícita de valor) y un campo ausente (clave inexistente) requiere un tratamiento más específico mediante `serde(default)` combinado con `Option`.
Este generador de estructuras Rust a partir de JSON produce definiciones de estructuras con las macros `#[derive(Serialize, Deserialize)]`, nombres de estructura en `PascalCase`, nombres de campo en `snake_case` con atributos `serde` de renombrado para las claves JSON originales, y los tipos de Rust adecuados para cada tipo de valor JSON. Los valores de cadena se convierten en `String`, los enteros en `i64`, los valores de punto flotante en `f64`, los booleanos en `bool`, los arrays en `Vec<ElementType>`, los objetos anidados en tipos de estructura anidados y los valores nulos en `Option<T>`. El código resultante está listo para compilarse una vez que se añaden las dependencias `serde` y `serde_json` al archivo `Cargo.toml`. Para los desarrolladores de Rust que integran APIs externas, crean microservicios o procesan flujos de eventos JSON, este generador elimina la parte más tediosa de la definición inicial de tipos.