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.