JSON para Classe Java
Cole um exemplo de JSON e o gerador emite uma ou mais classes Java com os tipos de campo corretos, getters, setters e anotações da biblioteca JSON. Suporta Jackson (@JsonProperty), Gson (@SerializedName) e Lombok (@Data/@Builder) para um código mais limpo. Objetos aninhados se tornam classes internas ou irmãs, dependendo do layout que você escolher.
Como converter JSON para Java
-
1
Cole o JSON
Um único exemplo é suficiente; múltiplos exemplos melhoram a detecção de nulidade.
-
2
Escolha a biblioteca
Jackson (mais comum no Spring), Gson (Android e alguns projetos legados) ou POJO simples sem anotações.
-
3
Escolha extras
Lombok para getters/setters gerados automaticamente, padrão de construtor, equals/hashCode. Ou deixe simples.
-
4
Escolha o estilo aninhado
Classes irmãs no mesmo arquivo (classes públicas Java 17+ devem estar em arquivos separados) ou classes estáticas aninhadas.
-
5
Copie o código
Cole em seu projeto. Nomes de classe correspondem às chaves JSON; o pacote é definido pelo que você configurar.
Exemplo de saída: Jackson + Lombok
Entrada:
{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }
Saída:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty("firstName")
private String firstName;
@JsonProperty("age")
private int age;
@JsonProperty("address")
private Address address;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {
@JsonProperty("city")
private String city;
}
Mapeamento de tipos
| JSON | Tipo Java |
|---|---|
| string | String |
| inteiro (≤ Integer.MAX) | Integer / int |
| inteiro grande | Long / BigInteger |
| decimal | Double / BigDecimal |
| booleano | Boolean / boolean |
| data ISO | LocalDate (Jackson JSR-310) |
| data e hora ISO | Instant / OffsetDateTime |
| null (com irmão não nulo) | Tipo wrapper (ex. Integer) |
| array | List<T> |
| objeto | Classe aninhada |
Escolhendo entre tipos primitivos e wrappers
- Primitivo (
int,long,boolean), não nulo, eficiente, sem auto-boxing. - Wrapper (
Integer,Long,Boolean), nulo, necessário se o campo pode estar ausente ou nulo no JSON.
O gerador padrão é para wrappers para qualquer coisa vista como nula, primitivo caso contrário.
Jackson vs Gson
| Recurso | Jackson | Gson |
|---|---|---|
| Ubicuidade no Spring | Sim, padrão | Não (precisa de configuração) |
| Desempenho | Mais rápido | Mais lento |
| Suporte a data JSR-310 | Via módulo extra | Via módulo extra |
| Polimorfismo | @JsonTypeInfo |
RuntimeTypeAdapter |
| Tolerância a vírgula final | Não (por padrão) | Sim |
Erros comuns
- Usar tipos primitivos para campos nulos.
intnão pode ser nulo; Jackson lançará erro se o JSON tiver"age": null. UseInteger. - Módulos de data ausentes. Jackson precisa de
jackson-datatype-jsr310paraInstant/LocalDate. Sem isso, datas caem paraStringou longs de época. - Compartilhar tipos wrapper entre classes não relacionadas. Se duas formas JSON tiverem um
Addressaninhado, o gerador cria duas classesAddress. Renomeie ou unifique manualmente. - Esquecer
@JsonIgnoreProperties(ignoreUnknown = true). Jackson estrito lança erro em propriedades desconhecidas; adicione esta anotação (ou configure globalmente) para desserialização tolerante.
Perguntas frequentes
Jackson na maioria dos casos, é o padrão do Spring, mais rápido e tem suporte a polimorfismo mais rico. Gson é mais leve e mais conhecido no Android, embora projetos Android estejam cada vez mais usando Moshi ou kotlinx.serialization.
Lombok reduz muito o código boilerplate (getters, setters, equals, hashCode, builder). É amplamente utilizado, mas requer o processador de anotações Lombok em sua construção. Desative se seu projeto evitar Lombok por razões de higiene de dependência.
Campos que são nulos em qualquer exemplo observado se tornam tipos wrappers (Integer em vez de int), para que possam conter nulo. Jackson então desserializa "age": null sem erro. Adicione @JsonInclude(Include.NON_NULL) para pular nulos na serialização.
Sim, se você selecionar “registro”. Registros são concisos, imutáveis e funcionam com Jackson 2.12+. Para projetos Spring Boot 3, registros mais geração sem Lombok é a escolha moderna.
Ferramentas relacionadas
Referência da Tabela ASCII
Tabela ASCII completa de 0 a 127 com valores decimais, hexadecimais, octais e binários e notação de referência numérica HTML, incluindo NUL, LF e DEL.
Referência de Caracteres HTML
Lista pesquisável de entidades HTML, seus códigos nomeados e numéricos, e uma cópia com um clique para caracteres e símbolos especiais.
Referência de atalhos de teclado
Pesquise atalhos padrão documentados do VS Code, Chrome e Bash com GNU Readline no macOS, Windows e Linux.
Gerador de EditorConfig
Gere um arquivo .editorconfig com suas regras de estilo e tamanho de indentação, fim de linha, charset e espaços em branco para formatação consistente entre IDEs e editores.
Validador de Email
Valide um endereço de email: verificação de sintaxe RFC 5322, consulta de registro MX em tempo real, além de detalhes de parte local, domínio e comprimento. Nenhum email é enviado.
Formatador de HTML
Formate HTML localmente no navegador com indentação de dois ou quatro espaços. O HTML não é enviado nem validado.
Ferramenta disponível em outros idiomas
- JSON vers classe Java [FR]
- JSON till Java-klass [SV]
- JSON เป็นคลาส Java [TH]
- JSON إلى فئة Java [AR]
- JSON ke Kelas Java [ID]
- JSON sang lớp Java [VI]
- JSON을 Java 클래스로 [KO]
- JSON zu Java-Klasse [DE]
- JSON a Clase Java [ES]
- JSON naar Java-klasse [NL]
- JSON na klasę Java [PL]
- JSON から Java クラスへ [JA]
- JSON в класс Java [RU]
- JSON'dan Java Sınıfına [TR]
- JSON 转 Java 类 [ZH]
- JSON to Java Class [EN]
- JSON in classe Java [IT]