JSON to Java

Generera Java POJO-klasser från JSON

Prova ett exempel
Rotklassnamn:

JSON-inmatning

Java-utdata

Körs lokalt · Säkert att klistra in hemligheter
Java-klasser visas här…

Vad är JSON till Java-klasskonvertering?

JSON till Java-klasskonvertering tar ett råformat JSON-objekt och producerar Plain Old Java Object (POJO)-definitioner med privata fält, getters och setters. Java har inget inbyggt JSON-typsystem, så varje JSON API-svar, konfigurationsfil eller meddelandenyttolast behöver en motsvarande klass innan du kan arbeta med den på ett typsäkert sätt. Bibliotek som Jackson och Gson mappar JSON-nycklar till Java-fält via reflektion, men de kräver att klassdefinitionerna finns redan.

En standard Java POJO för JSON-deserialisering deklarerar ett privat fält för varje JSON-nyckel, en konstruktor utan argument och ett getter/setter-par per fält. Nästlade JSON-objekt blir separata klasser. Arrayer blir List<T>-fält med en java.util.List-import. Primitiva JSON-typer mappas till Java-primitiver (int, double, boolean) eller deras wrapper-typer (Integer, Double, Boolean) när de används i generics. Null-värden mappas vanligtvis till Object eller en nullbar referenstyp.

Att skriva dessa klassdefinitioner för hand är repetitivt. Du läser varje JSON-nyckel, bestämmer Java-typen utifrån värdet, konverterar namnkonventioner från camelCase JSON till camelCase Java-fält, skapar PascalCase-klassnamn för nästlade objekt och lägger till getter/setter-mallkod. För ett JSON-objekt med 15 fält och 3 nästlade objekt innebär det att skriva 4 klasser, 30+ metoder och hålla allt konsekvent. En konverterare gör detta på millisekunder.

Varför använda en JSON till Java-konverterare?

Att manuellt skapa Java POJOs från JSON innebär att inspektera varje fält, härleda typer från exempelvärden, skriva getter/setter-par och upprepa processen för varje nästlat objekt. När API-kontraktet ändras uppdaterar du allt för hand. En konverterare tar bort det mekaniska arbetet.

Omedelbar POJO-generering
Klistra in din JSON och få kompletta Java-klassdefinitioner på under en sekund. Nästlade objekt, listor och primitiva typer detekteras och mappas automatiskt.
🔒
Integritetsfokuserad hantering
Konverteringen körs helt i din webbläsare med JavaScript. Din JSON-data lämnar aldrig din maskin. API-nycklar, tokens och produktionsdata förblir privata.
📝
Korrekt typhärledning
Varje genererat fält använder rätt Java-typ härled från JSON-värdet: String, int, double, boolean, List<T> eller Object för null-värden. Wrapper-typer används inuti generics.
📦
Inget konto eller installation
Öppna sidan och klistra in din JSON. Inget JDK, inga Maven-beroenden, inget konto. Fungerar på alla enheter med en webbläsare.

Användningsfall för JSON till Java

Spring Boot API-utveckling
Generera request- och response-DTOs från API JSON-exempel. Klistra in den förväntade nyttolastformen och få Java-klasser klara för @RequestBody- och @ResponseBody-annotationer i Spring-controllers.
Android-apputveckling
Skapa modellklasser för Retrofit- eller Volley-nätverkssvar. Klistra in JSON som returneras av ditt backend-API och få POJOs kompatibla med Gson- eller Moshi-konverterare.
Mikrotjänstintegration
Definiera typade meddelandeklasser för Kafka-, RabbitMQ- eller gRPC JSON-nyttolaster. Klistra in ett exempelmeddelande och generera POJOs som dokumenterar det förväntade kontraktet mellan tjänster.
Migrering av äldre system
Konvertera JSON API-svar till Java-klasser när du omsluter REST-endpoints i en typad klient. Användbart vid migrering från löst typade Map<String, Object>-mönster till korrekta domänmodeller.
QA och testautomatisering
Bygg typade testfixtures från API-responsexempel. QA-ingenjörer kan klistra in verkliga JSON-svar och producera POJO-definitioner för användning i JUnit- eller TestNG-testsviter med AssertJ-påståenden.
Lär dig Java OOP-mönster
Studenter kan klistra in valfri JSON-struktur och se hur Java representerar den med klasser, fält, getters, setters och nästlade typer. Utdata gör det konkret snarare än abstrakt.

Referens för JSON till Java-typmappning

Varje JSON-värde mappas till en specifik Java-typ. Tabellen nedan visar hur konverteraren översätter varje JSON-typ till sin Java-motsvarighet. Kolumnen Alternativ visar wrapper-typer som används i generiska sammanhang som List<T>, eller nyare Java-funktioner som Records.

JSON-typExempelJava-typAlternativ
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>

Referens för Java JSON-annotationer

Vid deserialisering av JSON med Jackson eller Gson styr annotationer hur JSON-nycklar mappas till Java-fält, hur okända fält hanteras och hur null-värden behandlas. Denna referens täcker de annotationer du stöter på oftast när du arbetar med genererade POJOs.

AnnotationSyfteBibliotek
@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

Java har tre vanliga metoder för att definiera typade strukturer för att lagra JSON-data. Var och en passar en annan projektstil och Java-version. POJOs är det traditionella mönstret med bredast kompatibilitet. Records minskar mallkod för oföränderliga data. Lombok genererar getters, setters och konstruktorer vid kompileringstid via annotationer.

POJO
Traditionellt Java-mönster. Fungerar med Java 8+. Du definierar privata fält plus getter/setter-metoder. Full kontroll över föränderbarhet och anpassad logik. Kompatibelt med alla JSON-bibliotek (Jackson, Gson, Moshi). Standardvalet för Spring Boot, Android och företagskodbaser.
Record (Java 16+)
Inbyggt sedan Java 16 (förhandsgranskning i 14). Kompakt syntax: record User(int id, String name) genererar konstruktor, accessorer, equals, hashCode och toString. Instanser är oföränderliga. Jackson stöder records från version 2.12. Bäst för värdeobjekt och DTOs där du inte behöver setters.
Lombok @Data
Tredjeparts annotationsprocessor vid kompileringstid. @Data genererar getters, setters, equals, hashCode och toString. @Builder lägger till ett builder-mönster. Minskar mallkod till nästan record-nivå samtidigt som föränderbarhet behålls. Kräver att Lombok läggs till i ditt byggverktyg (Maven/Gradle) och IDE-plugin.

Kodexempel

Dessa exempel visar hur man använder genererade Java POJOs med Jackson för deserialisering, hur man producerar Java-klasser programmatiskt från JavaScript och Python, och hur man använder CLI-verktyget jsonschema2pojo för batchgenerering.

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

Vanliga frågor

Vad är skillnaden mellan en POJO och en Java Bean?
En POJO (Plain Old Java Object) är en enkel Java-klass utan ramverksberoenden. En Java Bean är en POJO som följer specifika konventioner: en konstruktor utan argument, privata fält med publika getters och setters, och implementerar Serializable. För JSON-mappning kräver de flesta bibliotek Bean-konventioner (getters/setters) men kräver inte Serializable. Klasserna som genereras av det här verktyget följer Bean getter/setter-mönstret.
Vilket JSON-bibliotek ska jag använda med genererade POJOs?
Jackson (com.fasterxml.jackson) är det mest använda Java JSON-biblioteket och standardbiblioteket i Spring Boot. Gson (com.google.gson) är populärt i Android-projekt och har ett enklare API. Moshi är ett nyare alternativ från Square, designat för Kotlin-interoperabilitet. Alla tre fungerar med standard-POJOs som har getters och setters.
Hur hanterar konverteraren nästlade JSON-objekt?
Varje nästlat objekt blir en separat Java-klass. Om ett JSON-fält med namnet "address" innehåller ett objekt med nycklarna "street" och "city" skapar konverteraren en Address-klass med dessa fält och typar föräldrafältet som Address. Djupt nästlade strukturer producerar flera klassdefinitioner.
Vad händer när ett JSON-fält är null?
Null-fält typsätts som Object eftersom konverteraren inte kan härleda den avsedda typen från ett null-värde ensamt. I praktiken ersätter du Object med den förväntade typen (String, Integer etc.) när du känner till API-kontraktet. Om du använder Jackson tilldelas null-värden till referenstypsfält som standard utan fel.
Ska jag använda Java Records istället för POJOs för JSON?
Records fungerar bra för oföränderliga dataöverföringsobjekt där du inte behöver setters. Jackson stöder records från version 2.12, och Gson lade till stöd i senare versioner. Om ditt projekt körs på Java 16+ och du behandlar API-svar som skrivskyddade data, minskar records mallkoden. Om du behöver föränderbarhet eller riktar in dig på Java 8/11, håll dig till POJOs.
Hur hanterar jag JSON-nycklar som inte är giltiga Java-identifierare?
JSON-nycklar som "first-name" eller "2nd_place" är inte giltiga Java-fältnamn. Använd @JsonProperty("first-name") i Jackson eller @SerializedName("first-name") i Gson för att mappa JSON-nyckeln till ett giltigt Java-fältnamn som firstName. Konverteraren konverterar automatiskt nyckelnamn till camelCase Java-fält.
Kan jag generera Java-klasser från ett JSON Schema istället för ett JSON-exempel?
Det här verktyget genererar klasser från JSON-dataexempel. För JSON Schema-inmatning, använd jsonschema2pojo-projektet (tillgängligt som CLI-verktyg, Maven-plugin och Gradle-plugin). Det läser en JSON Schema-fil och producerar annoterade Java-klasser med valideringsbegränsningar, standardvärden och dokumentation från schemabeskrivningarna.