Conversor JSON para Java

Gere classes Java POJO a partir de JSON

Experimente um exemplo
Nome da classe raiz:

Entrada JSON

Saída Java

Roda localmente · Seguro para colar segredos
As classes Java aparecerão aqui…

O que é a conversão de JSON para classes Java?

A conversão de JSON para classes Java pega um objeto JSON bruto e produz definições de Plain Old Java Object (POJO) com campos privados, getters e setters. O Java não possui um sistema de tipos JSON nativo, portanto toda resposta de API JSON, arquivo de configuração ou payload de mensagem precisa de uma classe correspondente antes de poder ser manipulada de forma segura em termos de tipos. Bibliotecas como Jackson e Gson mapeiam as chaves JSON para campos Java via reflexão, mas exigem que as definições de classe existam primeiro.

Um POJO Java padrão para desserialização de JSON declara um campo privado para cada chave JSON, um construtor sem argumentos e um par getter/setter por campo. Objetos JSON aninhados se tornam classes separadas. Arrays se tornam campos List<T> com um import de java.util.List. Tipos JSON primitivos mapeiam para primitivos Java (int, double, boolean) ou seus tipos wrapper (Integer, Double, Boolean) quando usados dentro de genéricos. Valores nulos geralmente mapeiam para Object ou um tipo de referência que aceita null.

Escrever essas definições de classe manualmente é repetitivo. Você lê cada chave JSON, determina o tipo Java a partir do valor, converte convenções de nomenclatura de camelCase JSON para campos Java em camelCase, cria nomes de classe em PascalCase para objetos aninhados e adiciona o código boilerplate de getter/setter. Para um objeto JSON com 15 campos e 3 objetos aninhados, isso significa escrever 4 classes, mais de 30 métodos e manter tudo consistente. Um conversor faz isso em milissegundos.

Por que usar um conversor de JSON para Java?

Criar POJOs Java manualmente a partir de JSON significa inspecionar cada campo, inferir tipos a partir de valores de amostra, escrever pares getter/setter e repetir o processo para cada objeto aninhado. Quando o contrato da API muda, você atualiza tudo à mão. Um conversor elimina esse trabalho mecânico.

Geração instantânea de POJO
Cole seu JSON e obtenha definições completas de classes Java em menos de um segundo. Objetos aninhados, listas e tipos primitivos são detectados e mapeados automaticamente.
🔒
Processamento com privacidade em primeiro lugar
A conversão ocorre inteiramente no seu navegador usando JavaScript. Seu JSON nunca sai da sua máquina. Chaves de API, tokens e dados de produção permanecem privados.
📝
Inferência de tipos correta
Cada campo gerado usa o tipo Java adequado inferido a partir do valor JSON: String, int, double, boolean, List<T> ou Object para valores nulos. Tipos wrapper são usados dentro de genéricos.
📦
Sem instalação ou cadastro
Abra a página e cole seu JSON. Nenhum JDK, nenhuma dependência Maven, nenhuma conta. Funciona em qualquer dispositivo com um navegador.

Casos de Uso de JSON para Java

Desenvolvimento de APIs com Spring Boot
Gere DTOs de requisição e resposta a partir de amostras JSON de API. Cole o formato do payload esperado e obtenha classes Java prontas para as anotações @RequestBody e @ResponseBody nos controllers Spring.
Desenvolvimento de Apps Android
Crie classes de modelo para respostas de rede com Retrofit ou Volley. Cole o JSON retornado pela sua API backend e obtenha POJOs compatíveis com os conversores Gson ou Moshi.
Integração de Microsserviços
Defina classes de mensagem tipadas para payloads JSON do Kafka, RabbitMQ ou gRPC. Cole uma mensagem de amostra e gere POJOs que documentam o contrato esperado entre os serviços.
Migração de Sistemas Legados
Converta respostas de API JSON em classes Java ao encapsular endpoints REST em um cliente tipado. Útil ao migrar de padrões Map<String, Object> com tipagem fraca para modelos de domínio adequados.
QA e Automação de Testes
Construa fixtures de teste tipadas a partir de amostras de resposta de API. Engenheiros de QA podem colar respostas JSON reais e produzir definições de POJO para uso em suítes de testes JUnit ou TestNG com asserções AssertJ.
Aprendendo Padrões OOP em Java
Estudantes podem colar qualquer estrutura JSON e ver como o Java a representa com classes, campos, getters, setters e tipos aninhados. O resultado torna o conceito concreto em vez de abstrato.

Mapeamento de Tipos JSON para Java

Cada valor JSON mapeia para um tipo Java específico. A tabela abaixo mostra como o conversor traduz cada tipo JSON para seu equivalente Java. A coluna Alternativa mostra os tipos wrapper usados em contextos genéricos como List<T>, ou recursos mais novos do Java como Records.

Tipo JSONExemploTipo JavaAlternativa
string"hello"StringString
number (integer)42intint / Integer
number (float)3.14doubledouble / Double
booleantruebooleanboolean / Boolean
nullnullObjectObject (or @Nullable String)
object{"k": "v"}NestedClassRecord (Java 16+)
array of strings["a", "b"]List<String>List<String>
array of objects[{"id": 1}]List<Item>List<Item>
mixed array[1, "a"]List<Object>List<Object>

Referência de Anotações Java para JSON

Ao desserializar JSON com Jackson ou Gson, as anotações controlam como as chaves JSON são mapeadas para campos Java, como campos desconhecidos são tratados e como valores nulos são processados. Esta referência cobre as anotações que você encontrará com mais frequência ao trabalhar com POJOs gerados.

AnotaçãoFinalidadeBiblioteca
@JsonProperty("name")Maps a JSON key to a Java field with a different nameJackson
@SerializedName("name")Same as @JsonProperty, but for the Gson libraryGson
@JsonIgnorePropertiesIgnores unknown JSON keys during deserialization instead of failingJackson
@NullableMarks a field as accepting null values from JSON inputJSR 305 / JetBrains
@NotNullEnforces that a field must not be null, throws on violationBean Validation
@JsonFormat(pattern=...)Defines a date/time format for serialization and deserializationJackson

POJO vs Record vs Lombok

O Java tem três abordagens comuns para definir estruturas tipadas que armazenam dados JSON. Cada uma se adapta a um estilo de projeto e versão do Java diferente. POJOs são o padrão tradicional com a maior compatibilidade. Records reduzem o boilerplate para dados imutáveis. Lombok gera getters, setters e construtores em tempo de compilação via anotações.

POJO
Padrão Java tradicional. Funciona com Java 8+. Você define campos privados com métodos getter/setter. Controle total sobre mutabilidade e lógica personalizada. Compatível com todas as bibliotecas JSON (Jackson, Gson, Moshi). A escolha padrão para Spring Boot, Android e bases de código empresariais.
Record (Java 16+)
Integrado desde o Java 16 (preview no 14). Sintaxe compacta: record User(int id, String name) gera construtor, acessores, equals, hashCode e toString. Instâncias são imutáveis. Jackson suporta records a partir da versão 2.12. Ideal para objetos de valor e DTOs onde você não precisa de setters.
Lombok @Data
Processador de anotações de terceiros em tempo de compilação. @Data gera getters, setters, equals, hashCode e toString. @Builder adiciona o padrão builder. Reduz o boilerplate a níveis próximos aos de Record, mantendo a mutabilidade. Requer adicionar Lombok à ferramenta de build (Maven/Gradle) e ao plugin da IDE.

Exemplos de Código

Estes exemplos mostram como usar POJOs Java gerados com Jackson para desserialização, como produzir classes Java programaticamente a partir de JavaScript e Python, e como usar a ferramenta CLI jsonschema2pojo para geração em lote.

Java (Jackson deserialization)
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;
    private String email;
    private boolean active;
    private double score;
    private Address address;
    private List<String> tags;

    // getters and setters omitted for brevity

    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Alice\",\"email\":\"alice@example.com\",\"active\":true,\"score\":98.5,\"address\":{\"street\":\"123 Main St\",\"city\":\"Springfield\",\"zip\":\"12345\"},\"tags\":[\"admin\",\"user\"]}";
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);
        System.out.println(user.getName()); // -> Alice
    }
}

class Address {
    private String street;
    private String city;
    private String zip;
    // getters and setters
}
JavaScript (generate Java POJO from JSON)
// Minimal JSON-to-Java-POJO generator in JS
function jsonToJava(obj, name = "Root") {
  const classes = [];
  function infer(val, fieldName) {
    if (val === null) return "Object";
    if (typeof val === "string") return "String";
    if (typeof val === "number") return Number.isInteger(val) ? "int" : "double";
    if (typeof val === "boolean") return "boolean";
    if (Array.isArray(val)) {
      const first = val.find(v => v !== null);
      if (!first) return "List<Object>";
      const elem = infer(first, fieldName);
      const boxed = elem === "int" ? "Integer" : elem === "double" ? "Double" : elem === "boolean" ? "Boolean" : elem;
      return `List<${boxed}>`;
    }
    if (typeof val === "object") {
      const cls = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
      build(val, cls);
      return cls;
    }
    return "Object";
  }
  function build(obj, cls) {
    const fields = Object.entries(obj).map(([k, v]) => {
      const type = infer(v, k);
      return `    private ${type} ${k};`;
    });
    classes.push(`public class ${cls} {\n${fields.join("\n")}\n}`);
  }
  build(obj, name);
  return classes.join("\n\n");
}

console.log(jsonToJava({ id: 1, name: "Alice", scores: [98, 85] }, "User"));
// public class User {
//     private int id;
//     private String name;
//     private List<Integer> scores;
// }
Python (generate Java classes from JSON)
import json

def json_to_java(obj: dict, class_name: str = "Root") -> str:
    classes = []

    def infer(val, name):
        if val is None:
            return "Object"
        if isinstance(val, bool):
            return "boolean"
        if isinstance(val, int):
            return "int"
        if isinstance(val, float):
            return "double"
        if isinstance(val, str):
            return "String"
        if isinstance(val, list):
            if not val:
                return "List<Object>"
            elem = infer(val[0], name)
            boxed = {"int": "Integer", "double": "Double", "boolean": "Boolean"}.get(elem, elem)
            return f"List<{boxed}>"
        if isinstance(val, dict):
            cls = name[0].upper() + name[1:]
            build(val, cls)
            return cls
        return "Object"

    def build(obj, cls):
        fields = [f"    private {infer(v, k)} {k};" for k, v in obj.items()]
        classes.append(f"public class {cls} {{\n" + "\n".join(fields) + "\n}")

    build(obj, class_name)
    return "\n\n".join(classes)

data = json.loads('{"id": 1, "name": "Alice", "tags": ["admin"]}')
print(json_to_java(data, "User"))
# public class User {
#     private int id;
#     private String name;
#     private List<String> tags;
# }
CLI (jsonschema2pojo)
# Install jsonschema2pojo (requires Java 8+)
# Download from https://github.com/joelittlejohn/jsonschema2pojo

# Generate POJOs from a JSON file
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style jackson2

# Generate with Gson annotations instead
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style gson

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice", "tags": ["admin"]}' | \
  jsonschema2pojo --source-type json --annotation-style jackson2 \
  --target src/main/java --target-package com.example.model

Perguntas Frequentes

Qual é a diferença entre um POJO e um Java Bean?
Um POJO (Plain Old Java Object) é qualquer classe Java simples sem dependências de framework. Um Java Bean é um POJO que segue convenções específicas: um construtor sem argumentos, campos privados com getters e setters públicos, e implementa Serializable. Para mapeamento JSON, a maioria das bibliotecas exige as convenções Bean (getters/setters), mas não exige Serializable. As classes geradas por esta ferramenta seguem o padrão Bean de getter/setter.
Qual biblioteca JSON devo usar com os POJOs gerados?
Jackson (com.fasterxml.jackson) é a biblioteca JSON Java mais usada e o padrão no Spring Boot. Gson (com.google.gson) é popular em projetos Android e tem uma API mais simples. Moshi é uma alternativa mais recente da Square, projetada para interoperabilidade com Kotlin. As três funcionam com POJOs padrão que possuem getters e setters.
Como o conversor lida com objetos JSON aninhados?
Cada objeto aninhado se torna uma classe Java separada. Se um campo JSON chamado "address" contiver um objeto com as chaves "street" e "city", o conversor cria uma classe Address com esses campos e tipifica o campo pai como Address. Estruturas profundamente aninhadas produzem múltiplas definições de classe.
O que acontece quando um campo JSON é null?
Campos nulos são tipados como Object porque o conversor não consegue inferir o tipo pretendido a partir de um valor nulo isolado. Na prática, você substituiria Object pelo tipo esperado (String, Integer, etc.) assim que souber o contrato da API. Com Jackson, valores nulos são atribuídos a campos de tipo de referência por padrão, sem erros.
Devo usar Java Records em vez de POJOs para JSON?
Records funcionam bem para objetos de transferência de dados imutáveis onde você não precisa de setters. Jackson suporta records a partir da versão 2.12, e Gson adicionou suporte em versões posteriores. Se o seu projeto roda no Java 16+ e você trata as respostas de API como dados somente leitura, records reduzem o boilerplate. Se precisar de mutabilidade ou precisar suportar Java 8/11, use POJOs.
Como lidar com chaves JSON que não são identificadores Java válidos?
Chaves JSON como "first-name" ou "2nd_place" não são nomes de campo Java válidos. Use @JsonProperty("first-name") no Jackson ou @SerializedName("first-name") no Gson para mapear a chave JSON para um nome de campo Java válido como firstName. O conversor converte automaticamente os nomes de chaves para campos Java em camelCase.
Posso gerar classes Java a partir de um JSON Schema em vez de uma amostra JSON?
Esta ferramenta gera classes a partir de amostras de dados JSON. Para entrada de JSON Schema, use o projeto jsonschema2pojo (disponível como ferramenta CLI, plugin Maven e plugin Gradle). Ele lê um arquivo JSON Schema e produz classes Java anotadas com restrições de validação, valores padrão e documentação a partir das descrições do schema.