Ir para o conteúdo
Totalmente local

JSON para struct Rust

Converta um documento JSON em structs Rust prontas para serde.

Entrada
Saída

JSON para struct Rust

Cole um objeto ou array JSON e esta ferramenta gera structs Rust correspondentes, prontas para usar em um projeto que utiliza serde para serialização. Elimina o trabalho manual de escrever tipos de campos e atributos derive cada vez que uma resposta de API ou arquivo de config muda de estrutura.

As opções controlam a aparência do código gerado. Escolha quais traits derivar — Debug, Clone, Serialize, Deserialize, PartialEq — e se deve adicionar #[serde(rename_all = "camelCase")] para que campos Rust em snake_case idiomático continuem desserializando chaves JSON em camelCase corretamente. Valores nulos podem se tornar Option<T> automaticamente, e você pode escolher i32, i64 ou u64 para números inteiros e String ou &str emprestada (com uma lifetime) para texto. Objetos aninhados podem gerar como structs separadas no nível superior ou ser envolvidos em seu próprio pub mod, e campos podem ser públicos ou privados.

Arrays de objetos são mesclados em uma única struct: um campo presente em apenas alguns itens se torna Option<T> automaticamente, assim uma struct gerada a partir de alguns registros de amostra ainda corresponde ao conjunto de dados completo. Nomes de campos são convertidos para snake_case, palavras-chave Rust se tornam identificadores brutos como r#type, e um nome que não pode ser representado claramente mantém sua chave original via #[serde(rename = "...")] em vez disso.

Tudo funciona localmente no seu navegador — seu JSON nunca é enviado para lugar algum, portanto é seguro colar payloads de API reais ou dados de config. Copie o código gerado, baixe como arquivo .txt, ou envie a saída de volta para a entrada para refiná-la ainda mais.

FAQ

Instala o serde ou adiciona no Cargo.toml?
Não. Apenas gera o código da struct. Adicione serde com a feature derive no seu Cargo.toml separadamente: serde = { version = "1", features = ["derive"] }.
O que acontece com um campo que é nulo em alguns registros e presente em outros?
Quando "Envolver campos nulos em Option<T>" está ligado, esse campo se torna Option<T> para que desserialize corretamente se estiver presente, nulo ou ausente.
Por que um campo recebe um atributo #[serde(rename = "...")]?
Aparece quando a renomeação camelCase está desligada e a chave JSON não corresponde ao nome do campo Rust gerado em snake_case, então a chave original exata é preservada para desserialização.
Pode gerar structs a partir de um array no nível superior?
Sim. Um array de objetos produz um type alias como pub type Root = Vec<Item>; mais a struct Item, mesclando campos de cada elemento no array.
Meu JSON é enviado para algum lugar?
Não. A geração de structs funciona inteiramente no seu navegador — seu JSON nunca deixa seu dispositivo.