Pular para o conteúdo

Converter JSON em classes Java

Gera classes Java a partir de JSON: a página executa o json_typegen (WebAssembly) no modo Kotlin e reescreve cada data class como uma classe Java com campos privados, um construtor com todos os argumentos, getters e setters.

Criar um POJO para desserializar uma resposta REST com Jackson.

JSON

Quando usar

  • Criar um POJO para desserializar uma resposta REST com Jackson.
  • Esboçar classes DTO para um controller Spring a partir de um payload de exemplo.

Como usar

  1. Cole um objeto ou array JSON no editor da esquerda.
  2. Leia as classes: a raiz é Root e os objetos aninhados viram classes separadas com o nome da sua chave.
  3. Copie-as para arquivos .java separados (os imports de List e Jackson estão incluídos) e ajuste os tipos se necessário.

JSON

{
  "id": 42,
  "user_name": "ada",
  "active": true,
  "tags": ["admin", "editor"]
}

Classes Java

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Root {
	private Long id;
	@JsonProperty("user_name")
	private String userName;
	private Boolean active;
	private List<String> tags;

	public Root(Long id, String userName, Boolean active, List<String> tags) {
		this.id = id;
		this.userName = userName;
		this.active = active;
		this.tags = tags;
	}

	public Long getId() {
		return this.id;
	}

…

Detalhes e limitações

A geração roda no navegador com WebAssembly; não há configurações.

Chaves em snake_case viram campos em camelCase com @JsonProperty do Jackson; o import do Jackson e java.util.List são incluídos quando usados.

Números são mapeados para Long ou Double e booleanos para Boolean; getters booleanos usam get, não is.

Um valor null é tipado como Object, e um array de nulls como List<?>. Substitua-os por tipos concretos quando conhecer os dados reais.

FAQ

Posso converter um array JSON na raiz?

Sim. A raiz vira uma classe wrapper Root com um campo List<Root2>, e os elementos do array viram a classe Root2.

Campos opcionais são tratados?

Chaves ausentes em alguns elementos do array são detectadas, mas a saída Java descarta a marcação de opcional, então todo campo é um tipo wrapper anulável comum.

Ele gera anotações do Lombok ou records?

Não. Ele escreve classes simples com construtores, getters e setters explícitos.

Como os valores null são tipados?

Um campo que é null na amostra vira Object (private Object note;), porque nenhum tipo concreto pode ser inferido. Forneça uma amostra com um valor real para obter String, Long ou uma classe aninhada.

Especificações e referências