Transforme uma amostra de JSON em structs Rust com derives do serde, renomeações, Option e Vec
Funciona no seu navegador. Nada do que você digita é enviado a lugar nenhum. Verificado em 16 de outubro de 2026.Cole uma amostra de JSON e receba structs Rust com os derives Serialize e Deserialize do serde. Números inteiros viram i64 e qualquer decimal deixa o campo como f64; um valor null ou ausente em alguns objetos vira Option<T>, e chaves escritas de forma diferente do campo snake_case ganham um rename do serde, 1 rename_all quando todas estão em camelCase.
Esta página foi traduzida automaticamente do original em inglês. Nenhuma pessoa revisou ainda a tradução; a versão em inglês é a que deve ser considerada. Ler o original em inglês
Cole uma amostra de JSON, como a resposta de uma API, na caixa da esquerda.
As structs Rust aparecem enquanto você digita, cada uma com #[derive(Serialize, Deserialize)], campos em snake_case e as renomeações do serde de que precisam.
Ative Option em todo campo ou PartialEq se quiser, e defina o nome da struct raiz.
Clique em Copiar, ou em Baixar para salvar models.rs, e adicione serde (com a feature derive) e serde_json ao Cargo.toml.
O Rust decodifica JSON com o serde, e cada objeto precisa de uma struct cujos campos tenham os tipos certos e cujos nomes correspondam às chaves do JSON. Este conversor escreve essas structs a partir de uma amostra, então uma resposta longa de API vira Rust que compila com uma só colagem.
Como os tipos são escolhidos.
| Valor JSON | Tipo Rust |
|---|---|
| "text" | String |
| true / false | bool |
| 42 (só números inteiros) | i64 |
| 4.5 (algum decimal visto) | f64 |
| null, e também um tipo | Option |
| só null, ou tipos misturados | serde_json::Value |
| [ ... ] | Vec<...> |
| { } vazio | Map<String, Value> |
| { ... } | uma struct própria |
Chaves ausentes. Todos os objetos de um array são unidos em uma struct. Uma chave que alguns deixam de fora vira um Option, porque o serde trata um Option ausente como None e qualquer outro campo ausente como erro. Esses campos também recebem skip_serializing_if, então ao gravar a struct de volta eles ficam de fora de novo.
Nomes. Os campos ficam em snake_case. Quando toda chave é só a forma camelCase do seu campo, a struct leva um único rename_all; caso contrário, cada campo diferente ganha seu próprio rename. Palavras reservadas viram identificadores raw como r#type; self, super e crate não podem ser raw, então viram self_ com um rename.
Opções. Option em todo campo serve para APIs que podem omitir qualquer chave. Derivar PartialEq permite que os testes comparem valores. A struct raiz se chama Root, a menos que você dê outro nome.
Cada resultado foi verificado lendo o Rust de volta com as regras do serde e decodificando 9 amostras com ele. Nada do que você cola sai do navegador.
Cole uma amostra de JSON no conversor e as structs Rust aparecem ao lado, cada uma derivando Serialize e Deserialize. Adicione serde com a feature derive e serde_json ao Cargo.toml, cole as structs em um módulo e decodifique com serde_json::from_str::<Root>(&text).
Um campo vira Option quando a amostra o mostra como null, ou quando alguns objetos de um array deixam a chave de fora. O serde decodifica uma chave ausente em um Option como None, enquanto qualquer outro campo ausente é erro, então é o Option que deixa a struct aceitar todo objeto da amostra.
Os campos são escritos em snake_case, como pede o estilo do Rust. Quando toda chave é a forma camelCase do seu campo, a struct recebe um único #[serde(rename_all = "camelCase")]; senão, cada campo escrito de outro jeito ganha seu próprio #[serde(rename = "key")], então chaves como first-name ou 2fa também são decodificadas.
O JSON não diz até onde um número pode crescer, então i64 é o tipo inteiro seguro e f64 corresponde à precisão dupla com que os números JSON são lidos. Um campo vira f64 assim que algum valor da amostra tem parte decimal, porque o serde se recusa a ler 4.5 em um inteiro.
Palavras reservadas são escritas como identificadores raw, como r#type, e o serde remove o r# ao comparar com a chave, então não é preciso rename. As quatro palavras reservadas que não podem ser raw, self, Self, super e crate, viram self_ e semelhantes, com um rename de volta para a chave original.
Não. A conversão roda no seu navegador sem nenhuma requisição a um servidor, e o JSON não é guardado, então respostas de API com tokens ou dados pessoais ficam no seu dispositivo. Feche a aba e nada fica para trás.
Taxas e regras mudam; confira a fonte antes de confiar em um valor.
Ainda com dúvidas? Pergunte sobre Conversor de JSON para structs Rust e qualquer pessoa que saiba pode responder. Não é preciso ter conta.