JSON para POJO: classes ou records Java a partir de JSON
Cole seu JSON e receba Java pronto para usar: uma classe para cada objeto, com campos privados, um construtor sem argumentos e getters e setters, ou records Java, se preferir. Objetos aninhados ficam dentro da classe pai, então o resultado inteiro cabe em um único arquivo .java. Adicione anotações Jackson ou Gson quando precisar das chaves originais do JSON. A conversão acontece no navegador e seu JSON não é enviado.
JSON to POJO online: passo a passo
- Cole o JSON no campo JSON (ele mostra “Cole o JSON aqui...”). Um texto colado é convertido na hora. Se você digitar, o código é atualizado cerca de 300 milissegundos depois que você parar.
- Leia as classes em Código Java. Uma linha abaixo, como “2 classes geradas.”, informa quantas foram escritas.
- Selecione Copiar, logo abaixo do código. O botão mostra “Copiado” por um instante. Salve o código em um arquivo com o nome da classe raiz, por exemplo
Root.java. - Para mudar o resultado, abra Configurações: informe o Nome da classe raiz (o padrão é
Root), escolha em Anotações entre Nenhuma, Jackson e Gson, ou marque Usar records em vez de classes. O código é atualizado assim que você muda uma configuração. - Selecione Limpar para esvaziar o campo e começar de novo.
JSON POJO Java: um exemplo
Isto é o que você cola: { "user_id": 7, "name": "Ana", "price": 4.5, "tags": ["a", "b"], "address": { "city": "Kyoto" } }
Com Anotações em “Nenhuma”, o resultado começa com import java.util.List; e public class Root. Os campos são Integer userId, String name, Double price, List<String> tags e Address address. Depois vêm o construtor sem argumentos e getters e setters como getUserId e setUserId.
O objeto aninhado address virou Address, uma public static class dentro de Root, e por isso um arquivo basta. A chave user_id virou o campo userId. A linha de status avisa: “1 nome de campo foi alterado para se adequar ao Java.”
JSON para record Java com anotações Jackson
Defina o Nome da classe raiz como Order, escolha Jackson em Anotações e marque Usar records em vez de classes. O mesmo JSON vira public record Order(...).
Cada componente do record leva @JsonProperty("key") com a chave original do JSON, então user_id continua mapeado para userId. Se você escolher Gson, os mesmos componentes levam @SerializedName("key"), com o import do Gson. Records exigem Java 16 ou mais recente.
Como os tipos JSON viram tipos Java
Todos os tipos são encapsulados (não primitivos), então qualquer campo pode estar ausente ou ser nulo.
- Número inteiro como
7:Integer. Grande demais para isso (12345678901):Long. Ainda maior (99999999999999999999):BigInteger, com import. - Número com ponto decimal ou expoente, como
4.5,1.0ou2e3:Double. - Texto:
String.trueoufalse:Boolean(o getter égetActive, nãoisActive).null:Object. - Array de um só tipo, como
["a", "b"]:List<String>, comjava.util.Listimportado. Array vazio ou de tipos mistos:List<Object>. Array dentro de array:List<List<Integer>>. - Objeto: uma classe ou record aninhado com o nome da chave.
Os números são lidos exatamente como foram escritos, então um ID longo nunca é arredondado. Os imports só aparecem quando o código os usa. Se uma chave aparece duas vezes no mesmo objeto, vale a última.
Como os nomes de classes e campos são escolhidos
user_ideuser-nameviram os camposuserIdeuserName(camelCase).- Uma palavra reservada do Java, como
class, vira_class. - Um nome que começa com dígito, como
2nd, vira_2nd. - Uma chave
itemscom um array de objetos gera a classeIteme o campoList<Item>: a chave vai para o singular. - Uma chave
Stringcom um objeto geraStringData. Nomes que esconderiamString,ListouObjectrecebemDatano final. - Dois objetos com o mesmo nome: a segunda classe recebe um número, porque os nomes de classe precisam ser únicos no arquivo.
O nome da classe raiz é limpo até virar um nome Java válido, e um campo vazio resulta em Root. Quando o próprio JSON começa com um array de objetos, Root descreve um item e a página avisa para ler o JSON como List<Root>.
Quando o JSON não é aceito
O leitor é rigoroso, como o próprio JSON: comentários, aspas simples e vírgulas finais são erros. A mensagem “Não foi possível ler este JSON” traz um motivo claro e a posição, como “Linha 3, coluna 5”, por exemplo “O analisador parou em “}”. Verifique se falta uma vírgula, dois-pontos, colchete ou aspas logo antes.”
- Se o seu texto é um objeto JavaScript com chaves sem aspas ou com aspas simples, passe-o primeiro por “Objeto JavaScript para JSON” para obter JSON estrito.
- Para reformatar o JSON antes de converter, use “Formatador de JSON”.
- Para conferir o JSON contra um esquema, use “Validador de JSON Schema”.
- Para interfaces TypeScript a partir de JavaScript, veja “Conversor de JS para TS”.
Um JSON válido sem nenhum objeto, como 42 ou um array de números, mostra “Este JSON não tem nenhum objeto para virar classe.” Textos com mais de 2.000.000 de caracteres são recusados, assim como aninhamento mais profundo que 200 níveis.
Perguntas frequentes
Como converter JSON em objeto Java (POJO)?
Cole o JSON no campo “JSON” e copie o código de “Código Java”. Você recebe uma classe por objeto JSON, com campos privados, um construtor público sem argumentos e métodos públicos getX e setX. Salve o código em um arquivo com o nome da classe raiz, por exemplo Root.java, e depois leia o JSON com Jackson ou Gson.
Como converter um array JSON em objetos Java?
Cole o array de objetos como está. A ferramenta descreve um item do array como a classe raiz e avisa para ler o JSON como List. No Jackson isso é um TypeReference>, no Gson um TypeToken>. Um array dentro de um objeto vira um campo List, com a classe nomeada pela chave.
Como manter as chaves originais do JSON com Jackson ou Gson?
Abra “Configurações” e escolha Jackson ou Gson em “Anotações”. O Jackson adiciona @JsonProperty("key") e o Gson adiciona @SerializedName("key") em cada campo, junto com o import. Com “Nenhuma”, uma chave como user_id vira o campo userId, que não volta a corresponder ao JSON a menos que a chave original seja mantida por uma anotação ou por uma estratégia de nomes.
Posso gerar records Java a partir de JSON?
Sim. Marque “Usar records em vez de classes” em “Configurações”. Cada objeto JSON vira public record Name(Type a, Type b) {}, e objetos aninhados viram records dentro do record pai. Records exigem Java 16 ou mais recente. As anotações continuam funcionando e ficam em cada componente do record.
Por que um número JSON é Integer num lugar e Double em outro?
O tipo segue a forma como o número foi escrito. Um número inteiro é Integer, ou Long quando é grande demais para um Integer, ou BigInteger quando é grande demais para um Long. Um número escrito com ponto decimal ou expoente é Double, mesmo que seja 1.0.
O que acontece quando os objetos de um array têm chaves diferentes?
Eles são mesclados em uma única classe que contém todas as chaves vistas em qualquer um deles, então chaves que só alguns objetos têm também ganham um campo. Se uma chave tem tipos diferentes ou um array está vazio, o campo recebe o tipo Object ou List. Confira esses campos manualmente.
Ele gera classes Kotlin ou anotações Lombok?
Não. A saída é Java puro: classes com getters e setters, ou records. Se você usa Lombok, apague os métodos getter e setter e coloque @Data na classe. Uma data class do Kotlin precisa ser escrita à parte.
Qual o tamanho máximo do JSON e ele é enviado para algum lugar?
Até 2.000.000 de caracteres, com até 200 níveis de aninhamento. A conversão roda no seu navegador, então o JSON não é enviado nem salvo em lugar nenhum.