JSON para structs Rust (serde)

Gere structs Rust com derives Serialize/Deserialize do serde, campos snake_case, atributos rename, Option para nulls e Vec para arrays a partir de JSON. Grátis.

Requer os crates serde (com derive) e serde_json. Os campos ficam em snake_case com #[serde(rename)] quando a chave JSON é diferente.

Executa totalmente no seu navegador. Seus dados nunca são enviados.

Ferramentas Relacionadas

Ver Todas

O que é JSON para Rust?

Cole JSON e receba definições struct em Rust que o desserializam com serde. Cada struct deriva Debug, Clone, Serialize, Deserialize; os nomes de campo ficam em snake_case e mantêm a chave original com #[serde(rename = "…")] quando necessário.

Como usar JSON para Rust

  1. Cole um exemplo JSON em Entrada JSON (ou clique em Carregar exemplo / Abrir arquivo).
  2. Defina o Nome do tipo raiz (padrão Root).
  3. Copie o código Rust gerado ou clique em Baixar para salvá-lo como arquivo.

Exemplo

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

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

Quando usar JSON para Rust

Use-o ao escrever um cliente ou CLI em Rust que lê JSON. Refine os tipos depois – por exemplo u32 para contagens pequenas ou tipos do chrono para timestamps –, porque um exemplo não revela os intervalos reais.

Como funciona JSON para Rust

O exemplo é percorrido recursivamente e cada posição acumula os tipos que encontrou. Arrays de objetos são mesclados em um único tipo: uma chave ausente em alguns elementos vira opcional, uma chave que é null em algum lugar vira anulável, inteiros misturados com decimais viram um tipo de ponto flutuante e qualquer outra mistura de tipos recai em um tipo dinâmico. Objetos aninhados viram tipos nomeados próprios (PascalCase da chave, com chaves de array no singular: orders → Order), com sufixos numéricos quando os nomes colidem. A saída Rust mapeia inteiros para i64, decimais para f64, strings para String, booleanos para bool, arrays para Vec<T>, valores anuláveis para Option<T> e valores dinâmicos ou sempre nulos para serde_json::Value. Campos ausentes em alguns exemplos viram Option<T> com #[serde(default, skip_serializing_if = "Option::is_none")]. Palavras reservadas como type são escritas como identificadores brutos (r#type).

Casos de Uso Comuns

  • Desserializar uma resposta de API REST com reqwest + serde
  • Modelar um arquivo de configuração JSON para uma ferramenta CLI
  • Criar tipos para um handler de webhook
  • Converter fixtures para testes de integração em Rust

Perguntas Frequentes

De quais crates eu preciso?

serde com a feature derive e serde_json: serde = { version = "1", features = ["derive"] } e serde_json = "1".

Por que serde_json::Value?

Ele é usado quando uma chave mistura tipos ou é sempre null no exemplo, então nenhum tipo concreto de Rust pode ser escolhido com segurança.

Por que r#type?

type é uma palavra reservada do Rust; a sintaxe de identificador bruto permite usá-la como nome de campo enquanto o serde continua casando com a chave JSON.

Explore mais categorias