Herramienta de Tool Kumar

JSON a structs Rust

Genera structs públicos de Rust con derive de Debug, Clone, Serialize y Deserialize. Las claves JSON se convierten en campos snake_case con atributos rename de serde cuando el nombre original difiere.

Cómo usar esta herramienta

  1. Pega una respuesta representativa que incluya registros cuyos campos difieran.
  2. Revisa la salida generada y cambia el nombre raíz si es necesario.
  3. Copia o descarga el código y comprueba después los tipos con el contrato de tu API.

Ejemplo práctico

Esta salida procede del conversor integrado. Los dos precios permiten inferir un campo de coma flotante; los valores null y de cadena de note permiten inferir un campo que admite null.

Entrada

{
  "user-id": 42,
  "profile": {
    "city": "London",
    "created_at": "2026-10-14T09:00:00Z"
  },
  "items": [
    {
      "price": 12,
      "note": null
    },
    {
      "price": 12.5,
      "note": "gift"
    }
  ]
}

Salida

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    #[serde(rename = "user-id")]
    pub user_id: i64,
    pub profile: Profile,
    pub items: Vec<Item>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Profile {
    pub city: String,
    pub created_at: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Item {
    pub price: f64,
    pub note: Option<String>,
}

Usar los structs con serde_json

Activa la característica derive de la dependencia serde y añade serde_json en Cargo.toml. Copia los structs en un módulo y deserializa la respuesta.

La inferencia a partir de ejemplos no establece reglas de validación para la aplicación. Comprueba los rangos, los campos obligatorios y las marcas de tiempo antes de considerar el modelo decodificado como una entrada de confianza.

let model: Root = serde_json::from_str(&response_body)?;
let text = serde_json::to_string(&model)?;

Opciones y casos especiales

  • Los arrays se convierten en Vec y los campos tipados que admiten null, en Option. Los campos ausentes en algunos registros añaden skip_serializing_if = "Option::is_none".
  • Los valores desconocidos, los que solo son null o los que mezclan tipos usan serde_json::Value. Los cambios de nombre conservan la puntuación y las palabras reservadas de Rust usan identificadores raw cuando es posible.
  • Los enteros usan i64 o i128 si superan el rango de 64 bits con signo. Las fracciones usan f64. Revisa la compatibilidad de serde_json y el rango numérico antes de aceptar enteros muy grandes.
  • Las fechas siguen siendo String. Los importes decimales exactos necesitan un tipo de dominio y un serializador; un ejemplo JSON no puede proporcionar esas reglas.

Privado por defecto

Tu documento permanece en este navegador. Tool Kumar analiza, convierte y crea las descargas en tu dispositivo, sin cuenta ni pasos para subir archivos.

Preguntas sobre JSON a structs Rust

¿El generador incluye el derive de serde?
Sí. Importa serde::{Deserialize, Serialize} y deriva Debug, Clone, Serialize y Deserialize para los structs.
¿Se conservan los nombres JSON?
Sí. Genera atributos rename de serde cuando es necesario y puede usar rename_all = "camelCase" cuando eso reduce los mapeos individuales por campo.
¿Cómo se representan los valores null y los ausentes?
Los campos tipados que admiten null o están ausentes usan Option<T>. Los campos desconocidos y los que solo contienen null usan serde_json::Value, que también puede contener null de JSON.
¿Puedo deserializar el resultado con serde_json?
Sí. Añade serde con la característica derive y serde_json a tu proyecto Rust y deserializa después al tipo Root generado.

Herramientas relacionadas

JSON a Go, JSON a Java y Generador de JSON Schema.