JSON a structs de Rust (serde)

Genera structs de Rust con derives Serialize/Deserialize de serde, campos en snake_case, atributos rename, Option para null y Vec para arrays a partir de JSON. Gratis.

Requiere los crates serde (con derive) y serde_json. Los campos van en snake_case con #[serde(rename)] cuando la clave JSON es distinta.

Se ejecuta completamente en tu navegador. Tus datos nunca se suben.

Herramientas Relacionadas

Ver Todas

¿Qué es JSON a Rust?

Pega JSON y obtén definiciones struct de Rust que lo deserializan con serde. Cada struct deriva Debug, Clone, Serialize, Deserialize; los nombres de campo están en snake_case y conservan la clave original con #[serde(rename = "…")] cuando hace falta.

Cómo usar JSON a Rust

  1. Pega un ejemplo JSON en Entrada JSON (o haz clic en Cargar ejemplo / Abrir archivo).
  2. Fija el Nombre del tipo raíz (por defecto Root).
  3. Copia el código Rust generado o haz clic en Descargar para guardarlo como archivo.

Ejemplo

Entrada
{"id":1,"name":"A","tags":["x"]}
Salida
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub id: i64,
    pub name: String,
    pub tags: Vec<String>,
}

Cuándo usar JSON a Rust

Úsalo al escribir un cliente o una CLI en Rust que lea JSON. Afina después los tipos (por ejemplo, u32 para recuentos pequeños o tipos de chrono para marcas de tiempo), porque un ejemplo no puede indicarte los rangos reales.

Cómo funciona JSON a Rust

El ejemplo se recorre de forma recursiva y cada posición acumula los tipos que ha visto. Los arrays de objetos se fusionan en un solo tipo: una clave que falta en algunos elementos pasa a ser opcional, una clave que es null en algún sitio pasa a ser anulable, los enteros mezclados con decimales se convierten en un tipo de coma flotante y cualquier otra mezcla de tipos recurre a un tipo dinámico. Los objetos anidados se convierten en tipos con nombre propio (PascalCase de la clave, claves de array en singular: orders → Order), con sufijos numéricos si los nombres coinciden. La salida Rust convierte enteros en i64, decimales en f64, cadenas en String, booleanos en bool, arrays en Vec<T>, valores anulables en Option<T> y valores dinámicos o solo null en serde_json::Value. Los campos que faltan en algunos ejemplos pasan a ser Option<T> con #[serde(default, skip_serializing_if = "Option::is_none")]. Las palabras reservadas como type se escriben como identificadores en bruto (r#type).

Casos de Uso Comunes

  • Deserializar la respuesta de una API REST con reqwest + serde
  • Modelar un archivo de configuración JSON para una herramienta CLI
  • Crear tipos para un manejador de webhooks
  • Convertir fixtures para pruebas de integración en Rust

Preguntas Frecuentes

¿Qué crates necesito?

serde con la feature derive y serde_json: serde = { version = "1", features = ["derive"] } y serde_json = "1".

¿Por qué serde_json::Value?

Se usa cuando una clave mezcla tipos o es siempre null en el ejemplo, de modo que no se puede elegir con seguridad un tipo Rust concreto.

¿Por qué r#type?

type es una palabra reservada de Rust; la sintaxis de identificador en bruto permite usarla como nombre de campo y serde sigue asociándola a la clave JSON.

Explora más categorías