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 TodasO 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
- Cole um exemplo JSON em Entrada JSON (ou clique em Carregar exemplo / Abrir arquivo).
- Defina o Nome do tipo raiz (padrão
Root). - Copie o código Rust gerado ou clique em Baixar para salvá-lo como arquivo.
Exemplo
{"id":1,"name":"A","tags":["x"]} 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.