Ferramenta Tool Kumar
JSON para structs Rust
Gere structs Rust públicas com derives Debug, Clone, Serialize e Deserialize. As chaves JSON viram campos snake_case com atributos rename do serde quando o nome usado no JSON é diferente.
Como usar esta ferramenta
- Cole uma resposta representativa, incluindo registros cujos campos sejam diferentes.
- Revise a saída gerada e altere o nome raiz se necessário.
- Copie ou baixe o código e confira se os tipos correspondem ao contrato da sua API.
Exemplo prático
Esta saída vem do conversor integrado. Os dois preços de item permitem inferir um campo de ponto flutuante. Os valores null e string de note permitem inferir um campo que aceita 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"
}
]
}Saída
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>,
}
Use as structs com serde_json
Ative o recurso derive na dependência serde e adicione serde_json em Cargo.toml. Copie as structs para um módulo e desserialize a resposta.
A inferência baseada em exemplos não define regras de validação da aplicação. Confira intervalos, campos obrigatórios e timestamps antes de tratar o modelo decodificado como uma entrada confiável.
let model: Root = serde_json::from_str(&response_body)?;
let text = serde_json::to_string(&model)?;Opções e casos especiais
- Arrays viram Vec, e campos tipados que aceitam null viram Option. Campos ausentes em alguns registros adicionam skip_serializing_if = "Option::is_none".
- Valores desconhecidos, observados apenas como null ou de tipos mistos usam serde_json::Value. As renomeações preservam a pontuação, e palavras reservadas de Rust usam identificadores brutos quando possível.
- Inteiros usam i64 ou i128 quando excedem 64 bits com sinal. Valores fracionários usam f64. Revise a compatibilidade de serde_json e o intervalo numérico antes de aceitar inteiros muito grandes.
- Datas continuam sendo String. Valores monetários decimais exatos precisam de um tipo de domínio e de um serializador. Um exemplo JSON não fornece essas regras.
Privado por padrão
Seu documento fica neste navegador. O Tool Kumar analisa, converte e cria downloads no seu dispositivo, sem conta e sem envio ao servidor.
JSON para structs Rust: perguntas frequentes
- O gerador inclui derives do serde?
- Sim. Ele importa serde::{Deserialize, Serialize} e deriva Debug, Clone, Serialize e Deserialize para as structs.
- Os nomes do JSON são preservados?
- Sim. Ele gera atributos rename do serde quando necessário e pode usar rename_all = "camelCase" quando isso reduz os mapeamentos por campo.
- Como valores null e ausentes são representados?
- Campos tipados que aceitam null ou estão ausentes usam Option<T>. Campos desconhecidos e observados apenas como null usam serde_json::Value, que também pode armazenar null do JSON.
- Posso desserializar o resultado com serde_json?
- Sim. Adicione serde com o recurso derive e serde_json ao seu projeto Rust, depois desserialize para o tipo Root gerado.