JSON para TypeScript / Go / Rust
Cole qualquer amostra JSON. Receba interfaces TypeScript limpas, structs Go ou tipos Rust com tags serde — rápido, leve e pronto para colar no seu código.
O que esse conversor faz
Ele percorre uma amostra JSON, infere um tipo para cada valor e emite uma definição de tipo idiomática na sua linguagem escolhida. Objetos viram interfaces (TypeScript), structs (Go, Rust), e objetos aninhados produzem definições de tipo irmãs. Arrays de objetos unificam o shape do elemento — campos presentes em alguns itens mas não em outros viram opcionais, e valores primitivos que variam (string em alguns itens, integer em outros) colapsam em union ou em serde_json::Value no Rust. Nenhum dado é enviado a lugar nenhum — todo o inferrer roda no seu navegador.
Como usar
Cole um payload JSON representativo (idealmente um registro da resposta da sua API), escolha a linguagem de destino e copie o resultado. Se seu JSON tem múltiplas instâncias do mesmo shape (uma lista paginada, por exemplo), inclua o array — o inferrer aprende mais com a variação. O toggle de casing renomeia os campos na saída sem mexer nas chaves do JSON; em Go e Rust a chave original é preservada como tag de struct, então a serialização faz round-trip.
Dicas e pegadinhas
- Opcional vs nullable: um campo faltando em alguns registros vira
?/Option<T>, mas um campo presente em todo lugar com valor literalnullvira union comnull— os dois são diferentes e inferidos separadamente. - Números: integers ficam integers em Go e Rust (
int64,i64); floats viramfloat64/f64. TypeScript colapsa ambos emnumberporque a linguagem não distingue. - Arrays vazios:
[]infere comounknown[]/[]interface{}/Vec<serde_json::Value>— coloque um item de exemplo para conseguir um tipo real. - Renomeio de campo: só o inferrer renomeia. Seu parser JSON ainda precisa mapear chaves — Go usa tag
json:, Rust usa#[serde(rename = ...)].
Perguntas frequentes
Como ele lida com arrays de tipos mistos?
[1, 2, "x"], o tipo do elemento vira number | string. Se contém [{a: 1}, {a: 1, b: 2}], o elemento vira um tipo objeto com a obrigatório e b opcional. Em Go e Rust onde unions não têm equivalente limpo, primitivos mistos colapsam em interface{} / serde_json::Value.Lida com estruturas profundamente aninhadas?
Por que meus nomes de campo Go ficam em PascalCase mesmo escolhendo preservar?
encoding/json. A chave original do JSON é preservada na tag json:, então a serialização ainda produz o casing de entrada.Qual a diferença para geradores de código mais pesados?
Minha saída vai compilar?
use serde::{Deserialize, Serialize}; para Rust já vem incluído; encoding/json em Go é implícito). Se chaves do seu JSON colidem com palavras reservadas após o renomeio, Rust usa identificadores raw r# automaticamente.Algo é enviado para um servidor?
JSON.parse do navegador e o inferrer é uma função recursiva pequena nesta página. Abra DevTools > Network e você não verá nenhuma requisição enquanto digita. Seguro para payloads de produção, respostas de API internas e tudo que você não colaria num SaaS hospedado.
EN
PT
ES