Saltar al contenido

JSON a estructura Rust

Convierte un documento JSON en estructuras Rust listas para serde.

Entrada
Salida

JSON a estructura Rust

Pega un objeto o matriz JSON y esta herramienta genera estructuras Rust que coinciden, listas para insertar en un proyecto que usa serde para serialización. Ahorra el tedioso trabajo de escribir manualmente tipos de campo y atributos derive cada vez que una respuesta de API o archivo de configuración cambia de forma.

Las opciones controlan cómo se ve el código generado. Elige qué traits derivar — Debug, Clone, Serialize, Deserialize, PartialEq — y si agregar #[serde(rename_all = "camelCase")] para que los campos Rust idiomáticos snake_case sigan deserializando correctamente claves JSON camelCase. Los valores nulos pueden convertirse en Option<T> automáticamente, y puedes elegir i32, i64 o u64 para números enteros y String o &str prestado (con una vida útil) para texto. Los objetos anidados pueden generarse como estructuras de nivel superior separadas o envolverse en su propio pub mod, y los campos pueden ser públicos o privados.

Las matrices de objetos se fusionan en una única estructura: un campo que solo existe en algunos elementos se convierte automáticamente en Option<T>, por lo que una estructura generada a partir de algunos registros de muestra aún coincide con el conjunto de datos completo. Los nombres de campo se convierten a snake_case, las palabras clave de Rust se convierten en identificadores crudos como r#type, y un nombre que no se puede representar claramente mantiene su clave original a través de #[serde(rename = "...")] en su lugar.

Todo se ejecuta localmente en tu navegador — tu JSON nunca se carga en ningún lugar, por lo que es seguro pegar cargas de API reales o datos de configuración. Copia el código generado, descárgalo como archivo .txt, o devuelve el resultado a la entrada para refinarlo aún más.

Preguntas frecuentes

¿Instala serde o lo agrega a Cargo.toml?
No. Solo genera el código de estructura. Agrega serde con la característica derive a tu Cargo.toml por separado: serde = { version = "1", features = ["derive"] }.
¿Qué sucede con un campo que es nulo en algunos registros y presente en otros?
Cuando "Envolver campos nulos en Option<T>" está activado, ese campo se convierte en Option<T> para que se deserialice correctamente si está presente, es nulo o falta.
¿Por qué un campo obtiene un atributo #[serde(rename = "...")] ?
Esto aparece cuando el renombrado camelCase está desactivado y la clave JSON no coincide con el nombre de campo Rust generado snake_case, por lo que la clave original exacta se preserva para la deserialización.
¿Puede generar estructuras a partir de un array en el nivel superior?
Sí. Un array de objetos produce un alias de tipo como pub type Root = Vec<Item>; más la estructura Item, fusionando campos en cada elemento del array.
¿Se carga mi JSON en algún lugar?
No. La generación de estructuras se ejecuta completamente en tu navegador — tu JSON nunca sale de tu dispositivo.