UTILS.
100% no navegador
🦀

JSON para Structs Serde do Rust

Gere structs Rust com derives serde a partir de um JSON de exemplo, prontos para Serialize/Deserialize, com Option para campos nulos e atributos rename.

saída

Sobre esta ferramenta

A ferramenta JSON para Structs Serde do Rust converte um JSON de exemplo colado em structs Rust anotados para serde, para que você possa desserializar o mesmo payload sem escrever cada campo à mão. Ela analisa o JSON, infere tipos Rust recursivamente e emite um struct #[derive(Serialize, Deserialize, ...)] por objeto: strings viram String, inteiros i64 (ou u64 quando todos os exemplos são não negativos), outros números f64, booleanos bool, arrays Vec<T>, e objetos aninhados seus próprios structs PascalCase definidos antes de seus pais.

Todo o trabalho acontece localmente no seu navegador com JSON.parse e JavaScript puro — nada é enviado. Campos de struct são convertidos para snake_case, e sempre que uma chave JSON difere do campo snake_case a ferramenta adiciona #[serde(rename = "originalKey")] para que o struct ainda mapeie para o formato do fio. Chaves ausentes em alguns exemplos irmãos, ou vistas como null, viram Option<T> com #[serde(default)] para que a desserialização tolere sua ausência. Arrays vazios recorrem a Vec<serde_json::Value>.

O alternador de largura de inteiro alterna entre 64-bit (i64/u64, padrão) e 32-bit (i32/u32), promovendo para 64-bit automaticamente quando um valor amostrado excede a faixa de 32-bit. O alternador de derive escolhe entre o conjunto completo (Serialize, Deserialize, Debug, Clone) e um mínimo Serialize, Deserialize. O arquivo começa com use serde::{Serialize, Deserialize};. Copie-o ou baixe um arquivo .rs.

Perguntas frequentes

Como os tipos JSON são mapeados para Rust?
string para String, inteiro para i64 (ou u64 quando todo exemplo é não negativo), número não inteiro para f64, booleano para bool, array para Vec<T>, e objeto para um struct nomeado com derives serde. Campos nulos ou ausentes viram Option<T> com #[serde(default)].
Quando #[serde(rename)] é adicionado?
Sempre que a chave JSON não é igual ao seu nome de campo snake_case — por exemplo, uma chave userName produz o campo user_name com #[serde(rename = "userName")], para que o struct ainda desserialize o JSON original exatamente.
Posso escolher a largura do inteiro?
Sim. O alternador de largura emite inteiros 64-bit (i64/u64) ou 32-bit (i32/u32). O sinal segue os dados: exemplos todos não negativos usam o tipo sem sinal. Valores além da faixa de 32-bit são promovidos para 64-bit automaticamente.
Quais derives são incluídos?
O padrão é #[derive(Serialize, Deserialize, Debug, Clone)]; a opção mínima emite apenas Serialize, Deserialize. Structs filhos são declarados antes dos pais que os referenciam, para que o módulo compile como está.

Mais ferramentas