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. 1

    Cole o JSON

    Um único exemplo é suficiente; múltiplos exemplos melhoram a detecção de nulidade.

  2. 2

    Escolha a biblioteca

    Jackson (mais comum no Spring), Gson (Android e alguns projetos legados) ou POJO simples sem anotações.

  3. 3

    Escolha extras

    Lombok para getters/setters gerados automaticamente, padrão de construtor, equals/hashCode. Ou deixe simples.

  4. 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. 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. int não pode ser nulo; Jackson lançará erro se o JSON tiver "age": null. Use Integer.
  • Módulos de data ausentes. Jackson precisa de jackson-datatype-jsr310 para Instant/LocalDate. Sem isso, datas caem para String ou longs de época.
  • Compartilhar tipos wrapper entre classes não relacionadas. Se duas formas JSON tiverem um Address aninhado, o gerador cria duas classes Address. 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

Ferramenta disponível em outros idiomas