Skip to main content
Volver a herramientas

JSON to Rust Struct

Genera structs de Rust con derives de serde a partir de un objeto JSON

Acerca de JSON to Rust Struct

Escribe structs de Rust que derivan Debug, Clone, Serialize y Deserialize, con campos en snake_case y #[serde(rename)] cuando el nombre del campo difiere de su clave JSON. Los enteros se mapean a i64, los decimales a f64, los null y las claves ausentes en algunos elementos de un array a Option<T>, y los valores mixtos o vacíos usan serde_json::Value. Sirve para tipar respuestas de API en clientes con reqwest; contrasta los tipos numéricos con datos reales, ya que la generación ocurre en tu navegador a partir de una sola muestra.

Categoría: Conversores.

Preguntas frecuentes

¿Qué crates necesita el código Rust generado?

▾

serde con la feature derive y serde_json, que se agregan con cargo add serde --features derive y cargo add serde_json. serde_json analiza el texto y también aporta el tipo serde_json::Value que se usa en los campos sin tipo concreto.

¿Por qué algunos campos usan r#type o un guion bajo al final?

▾

Las claves que son palabras reservadas de Rust se convierten en identificadores raw como r#type o r#match, cada uno con un rename explícito a la clave original. self, super y crate no pueden ser identificadores raw, así que pasan a self_, super_ y crate_.

¿Qué pasa cuando una clave falta en algunos elementos de un array?

▾

Todos los elementos de un array se combinan en un solo struct, y una clave que falta en al menos uno de ellos se convierte en Option<T>. Serde completa con None un campo Option ausente, así que no hace falta el atributo #[serde(default)].

¿Cómo convierto JSON en los structs generados?

▾

Usa let root: Root = serde_json::from_str(&texto)?; para un objeto, o convierte a RootList, un alias de Vec<Root>, cuando el JSON es un array en el nivel superior. Serde ignora las claves desconocidas por defecto; agrega #[serde(deny_unknown_fields)] a un struct para rechazarlas.

Herramientas relacionadas