Skip to content

Conversor JSON para struct Rust

Cole JSON e obtenha structs serde idiomáticas do Rust na hora, 100% no navegador. Tipagem correta i64/u64/f64, Option para nulos, #[serde(rename)] para camelCase. Grátis.

Sem rastreamento Roda no navegador Grátis
Opções
0 caracteres
Saída Rust
0 linhas
Saída verificada em relação à semântica do serde e à formatação do rustfmt para payloads de API do mundo real. — Go Tools Team · Jul 2, 2026

O que é conversão de JSON para Rust?

A conversão de JSON para Rust transforma uma amostra de JSON em structs Rust prontos para compilar com as macros #[derive(Serialize, Deserialize)] do serde, para que você nunca escreva à mão o código repetitivo de desserialização para respostas de API ou arquivos de configuração. Este gerador rápido de struct Rust infere tipos numéricos corretos, marca campos ausentes como Option e adiciona #[serde(rename)] para chaves que não estão em snake_case — tudo 100% no seu navegador.

Exemplos

Resposta de API

{"id":101,"name":"Ada Lovelace","email":"ada@example.com","active":true,"roles":["admin","user"]}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub id: i64,
    pub name: String,
    pub email: String,
    pub active: bool,
    pub roles: Vec<String>,
}

Um payload REST típico torna-se um struct pronto para serde que você pode inserir diretamente no seu cliente. Números inferem i64, arrays tornam-se Vec<String>.

Objeto aninhado

{"repo":"serde","owner":{"login":"dtolnay","id":100}}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub repo: String,
    pub owner: Owner,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Owner {
    pub login: String,
    pub id: i64,
}

Objetos aninhados tornam-se structs separados e nomeados (Owner) referenciados por campo — formatos idênticos são deduplicados.

Array de objetos (campo opcional)

{"users":[{"id":1,"nick":"x"},{"id":2}]}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub users: Vec<User>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    pub id: i64,
    pub nick: Option<String>,
}

Arrays de objetos são mesclados em um único struct de elemento. Chaves ausentes em alguns itens tornam-se Option<String> — sem necessidade de #[serde(default)].

Chaves em camelCase

{"login":"octocat","publicRepos":15,"followerCount":9001,"createdAt":"2011-01-25"}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub login: String,
    #[serde(rename = "publicRepos")]
    pub public_repos: i64,
    #[serde(rename = "followerCount")]
    pub follower_count: i64,
    #[serde(rename = "createdAt")]
    pub created_at: String,
}

Os campos tornam-se snake_case com #[serde(rename)] mapeando de volta para a chave JSON original. Chaves já em snake, como login, não recebem rename.

Como converter JSON para Rust

  1. 1

    Cole seu JSON

    Insira um objeto JSON, array ou resposta de API no campo de entrada. A conversão começa instantaneamente.

  2. 2

    Ajuste a saída

    Renomeie o struct raiz e alterne os derives serde, Debug e Clone ou a visibilidade pub para combinar com o estilo do seu crate.

  3. 3

    Copie ou baixe

    Pegue o Rust gerado com um clique e cole-o diretamente no seu projeto.

Common Use Cases

Clientes de API tipados
Transforme uma resposta de exemplo de REST ou GraphQL em structs serde para um cliente reqwest ou semelhante, sem escrever código repetitivo de desserialização à mão.
Análise de configuração e fixtures
Gere structs para arquivos de configuração JSON, fixtures de teste ou payloads de webhook que você precisa desserializar com serde_json.
Prototipagem rápida
Cole um payload desconhecido para ver sua estrutura instantaneamente como tipos Rust — uma forma rápida de explorar uma nova API antes de integrá-la.

Como a conversão funciona

Inferência estrutural
Cada objeto torna-se um struct nomeado; formatos idênticos são deduplicados, então você obtém um único struct, não cópias. Arrays de objetos são mesclados chave por chave, e chaves ausentes em alguns itens tornam-se Option<T>.
Tipagem numérica correta
Inteiros viram i64, sobem para u64 além de i64::MAX e recorrem a f64 além de u64. Floats são detectados pelo token (1.0, 2e3), então a desserialização do serde nunca falha por uma incompatibilidade de float em inteiro.
Identificadores idiomáticos e compiláveis
As chaves viram campos snake_case com #[serde(rename)] de volta à chave original; palavras-chave do Rust, nomes duplicados e chaves que não são identificadores são saneados, então a saída sempre compila.
100% no lado do cliente
A análise e a geração rodam no seu navegador sem chamadas de rede, então seus dados permanecem privados.

Dicas para structs Rust limpos

Nomeie seu struct raiz
Defina um nome de raiz significativo (por exemplo, User, ApiResponse) em vez do padrão Root para um código legível.
Adicione serde_json apenas quando necessário
serde_json::Value aparece em arrays vazios ou de tipos mistos e em campos que só têm null. Dê a esses campos um tipo concreto a partir de uma amostra mais rica, se possível, ou adicione serde_json ao Cargo.toml.
Revise Option vs. obrigatório
Os campos são marcados como Option<T> apenas quando uma amostra os omite. Cole um payload representativo para que a ferramenta infira com precisão os campos obrigatórios e opcionais.

Perguntas frequentes

Como converter JSON para um struct Rust?
Cole seu JSON no campo de entrada. O conversor o lê instantaneamente no seu navegador e gera structs Rust com derives serde à direita. Clique em Copiar para pegar o resultado — sem upload, sem conta, sem espera.
Ele gera derives serde? Preciso de serde e serde_json?
Sim — a saída usa #[derive(Debug, Clone, Serialize, Deserialize)] por padrão. Adicione serde com o recurso derive ao seu Cargo.toml. Você só precisa de serde_json como dependência se a saída contiver serde_json::Value, o que aparece em arrays vazios ou mistos e em campos que só têm null. Desligue a chave serde para emitir structs simples.
Como uso o struct gerado para fazer o parse de JSON?
Adicione serde_json ao seu Cargo.toml e desserialize em uma linha: let root: Root = serde_json::from_str(json)?;. O derive Deserialize gerado faz o resto — use serde_json::from_slice para um slice de bytes ou from_reader para um arquivo ou corpo HTTP, e serde_json::to_string para serializar de volta.
Como campos opcionais e null são tratados?
Quando uma chave aparece em alguns itens do array, mas não em outros, ela vira um campo Option. Um campo que é sempre apenas null vira um serde_json::Value opcional. O serde trata Option como opcional automaticamente, então nenhum atributo #[serde(default)] é adicionado ou exigido.
Como ele lida com chaves em camelCase e palavras-chave do Rust?
Os nomes dos campos são convertidos para snake_case idiomático, e um atributo #[serde(rename)] os mapeia de volta para a chave JSON exata. Palavras-chave reservadas como type ou match são emitidas como type_ ou match_ com um rename, o que é mais robusto que identificadores crus porque também cobre self, crate e super.
Ele pode usar #[serde(rename_all)] em vez de renames por campo?
A ferramenta emite um #[serde(rename)] por campo porque isso sempre funciona — mesmo quando um payload mistura camelCase, snake_case e chaves irregulares. Se todos os campos de um struct seguem uma única convenção, apague esses atributos e coloque um único #[serde(rename_all = "camelCase")] no struct; ambos desserializam de forma idêntica.
Qual tipo numérico do Rust ele usa?
Inteiros viram i64, ou u64 quando um valor excede i64::MAX, e recorrem a f64 além de u64 — assim IDs grandes continuam íntegros na ida e volta. Qualquer número escrito com ponto decimal ou expoente (como 1.0 ou 2e3) vira f64, porque o serde rejeitaria um float em um campo inteiro.
Como datas e carimbos de data e hora são tipados?
JSON não tem tipo de data, então strings ISO como 2011-01-25 ou carimbos RFC 3339 saem como String. Para tratar datas de verdade, altere o campo para um tipo chrono — DateTime no fuso Utc, ou NaiveDate — e ative o recurso serde do chrono. O serde então faz o parse de RFC 3339 automaticamente.
Como lidar com objetos de chaves dinâmicas ou desconhecidas?
Quando as chaves variam — por exemplo, um mapa de IDs para valores — substitua o struct gerado por um HashMap com String como chave. Para manter um struct tipado e ainda capturar campos extras, adicione um campo #[serde(flatten)] que seja um HashMap. Para valores totalmente dinâmicos, serde_json::Value é o tipo curinga.
Meus dados JSON são privados e seguros?
Sim. A conversão roda 100% no seu navegador com JavaScript. Seu JSON — incluindo tokens, IDs ou dados de clientes — nunca sai da página e nunca é enviado a um servidor.
Posso gerar structs Rust simples sem serde?
Sim. Desligue a chave serde para remover a linha use serde, os derives Serialize e Deserialize e todos os atributos #[serde(rename)] — sobram structs limpos. Você também pode alternar os derives Debug e Clone e a visibilidade pub.
A ferramenta é grátis? Preciso de uma conta?
É completamente grátis, sem cadastro, sem limites e sem anúncios poluindo o espaço de trabalho.

Ferramentas relacionadas

Ver todas as ferramentas →