JSON to Java

Java POJO-klassen genereren vanuit JSON

Probeer een voorbeeld
Naam root-klasse:

JSON-invoer

Java-uitvoer

Draait lokaal · Veilig om secrets te plakken
Java-klassen verschijnen hier…

Wat is JSON naar Java-klasse-conversie?

JSON naar Java-klasse-conversie zet een ruwe JSON-object om in Plain Old Java Object (POJO)-definities met private velden, getters en setters. Java heeft geen ingebouwd JSON-typesysteem, dus elke JSON API-response, configuratiebestand of berichtpayload heeft een bijbehorende klasse nodig voordat je er op een type-veilige manier mee kunt werken. Bibliotheken zoals Jackson en Gson koppelen JSON-sleutels aan Java-velden via reflectie, maar ze vereisen dat de klassedefinities al bestaan.

Een standaard Java POJO voor JSON-deserialisatie declareert een private veld voor elke JSON-sleutel, een constructor zonder argumenten en een getter/setter-paar per veld. Geneste JSON-objecten worden afzonderlijke klassen. Arrays worden List<T>-velden met een java.util.List-import. Primitieve JSON-typen mappen naar Java-primitieven (int, double, boolean) of hun wrapper-typen (Integer, Double, Boolean) bij gebruik in generics. Null-waarden mappen doorgaans naar Object of een nullable referentietype.

Deze klassedefinities met de hand schrijven is repetitief. Je leest elke JSON-sleutel, bepaalt het Java-type op basis van de waarde, converteert naamgevingsconventies van camelCase JSON naar camelCase Java-velden, maakt PascalCase-klassenamen voor geneste objecten en voegt de getter/setter-boilerplate toe. Voor een JSON-object met 15 velden en 3 geneste objecten betekent dat het schrijven van 4 klassen, 30+ methoden en alles consistent houden. Een converter doet dit in milliseconden.

Waarom een JSON naar Java-converter gebruiken?

Java POJO's handmatig aanmaken vanuit JSON betekent elk veld inspecteren, typen afleiden uit voorbeeldwaarden, getter/setter-paren schrijven en het proces herhalen voor elk genest object. Wanneer het API-contract verandert, update je alles met de hand. Een converter neemt dat mechanische werk weg.

Directe POJO-generatie
Plak je JSON en ontvang complete Java-klassedefinities in minder dan een seconde. Geneste objecten, lijsten en primitieve typen worden automatisch gedetecteerd en gemapped.
🔒
Privacy-first verwerking
De conversie verloopt volledig in je browser via JavaScript. Je JSON-data verlaat je apparaat nooit. API-sleutels, tokens en productiedata blijven privé.
📝
Correcte type-inferentie
Elk gegenereerd veld gebruikt het juiste Java-type afgeleid uit de JSON-waarde: String, int, double, boolean, List<T>, of Object voor nulls. Wrapper-typen worden gebruikt binnen generics.
📦
Geen installatie of aanmelding
Open de pagina en plak je JSON. Geen JDK, geen Maven-afhankelijkheden, geen account. Werkt op elk apparaat met een browser.

JSON naar Java-toepassingen

Spring Boot API-ontwikkeling
Genereer request- en response-DTO's vanuit API JSON-samples. Plak de verwachte payload-shape en ontvang Java-klassen klaar voor @RequestBody- en @ResponseBody-annotaties in Spring-controllers.
Android App-ontwikkeling
Maak modelklassen voor Retrofit- of Volley-networkresponses. Plak de JSON die je backend API retourneert en ontvang POJO's compatibel met Gson- of Moshi-converters.
Microservice-integratie
Definieer getypeerde berichtklassen voor Kafka-, RabbitMQ- of gRPC JSON-payloads. Plak een voorbeeldbericht en genereer POJO's die het verwachte contract tussen services documenteren.
Legacy-systeemmigratie
Converteer JSON API-responses naar Java-klassen bij het omhullen van REST-endpoints in een getypeerde client. Handig bij de migratie van losjes getypeerde Map<String, Object>-patronen naar correcte domeinmodellen.
QA en testautomatisering
Bouw getypeerde testfixtures vanuit API-responsesamples. QA-engineers kunnen echte JSON-responses plakken en POJO-definities produceren voor gebruik in JUnit- of TestNG-testsuites met AssertJ-assertions.
Java OOP-patronen leren
Studenten kunnen elke JSON-structuur plakken en zien hoe Java deze weergeeft met klassen, velden, getters, setters en geneste typen. De uitvoer maakt het concreet in plaats van abstract.

JSON naar Java type-mapping

Elke JSON-waarde mapt naar een specifiek Java-type. De onderstaande tabel toont hoe de converter elk JSON-type vertaalt naar zijn Java-equivalent. De kolom Alternatief toont wrapper-typen die worden gebruikt in generieke contexten zoals List<T>, of nieuwere Java-functies zoals Records.

JSON-typeVoorbeeldJava-typeAlternatief
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>

Java JSON-annotatieverwijzing

Bij het deserialiseren van JSON met Jackson of Gson bepalen annotaties hoe JSON-sleutels mappen naar Java-velden, hoe onbekende velden worden afgehandeld en hoe null-waarden worden behandeld. Deze verwijzing behandelt de annotaties die je het vaakst tegenkomt bij het werken met gegenereerde POJO's.

AnnotatieDoelBibliotheek
@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 heeft drie gangbare benaderingen voor het definiëren van getypeerde structuren om JSON-data in op te slaan. Elke benadering past bij een andere projectstijl en Java-versie. POJO's zijn het traditionele patroon met de breedste compatibiliteit. Records verminderen boilerplate voor onveranderlijke data. Lombok genereert getters, setters en constructors tijdens compilatie via annotaties.

POJO
Traditioneel Java-patroon. Werkt met Java 8+. Je definieert private velden plus getter/setter-methoden. Volledige controle over veranderlijkheid en aangepaste logica. Compatibel met elke JSON-bibliotheek (Jackson, Gson, Moshi). De standaardkeuze voor Spring Boot, Android en enterprise-codebases.
Record (Java 16+)
Ingebouwd sinds Java 16 (preview in 14). Compacte syntax: record User(int id, String name) genereert constructor, accessors, equals, hashCode en toString. Instanties zijn onveranderlijk. Jackson ondersteunt records vanaf versie 2.12. Het beste voor value-objecten en DTO's waarbij je geen setters nodig hebt.
Lombok @Data
Derde-partij compile-time annotatieverwerker. @Data genereert getters, setters, equals, hashCode en toString. @Builder voegt een builder-patroon toe. Vermindert boilerplate tot bijna record-niveau met behoud van veranderlijkheid. Vereist Lombok toevoegen aan je buildtool (Maven/Gradle) en IDE-plugin.

Codevoorbeelden

Deze voorbeelden tonen hoe je gegenereerde Java POJO's gebruikt met Jackson voor deserialisatie, hoe je programmatisch Java-klassen produceert vanuit JavaScript en Python, en hoe je de jsonschema2pojo CLI-tool gebruikt voor batchgeneratie.

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

Veelgestelde vragen

Wat is het verschil tussen een POJO en een Java Bean?
Een POJO (Plain Old Java Object) is elke eenvoudige Java-klasse zonder frameworkafhankelijkheden. Een Java Bean is een POJO die specifieke conventies volgt: een constructor zonder argumenten, private velden met publieke getters en setters, en implementeert Serializable. Voor JSON-mapping vereisen de meeste bibliotheken Bean-conventies (getters/setters) maar niet Serializable. De klassen die door deze tool worden gegenereerd volgen het Bean getter/setter-patroon.
Welke JSON-bibliotheek moet ik gebruiken met gegenereerde POJO's?
Jackson (com.fasterxml.jackson) is de meest gebruikte Java JSON-bibliotheek en de standaard in Spring Boot. Gson (com.google.gson) is populair in Android-projecten en heeft een eenvoudigere API. Moshi is een nieuwer alternatief van Square, ontworpen voor Kotlin-interoperabiliteit. Alle drie werken met standaard POJO's die getters en setters hebben.
Hoe gaat de converter om met geneste JSON-objecten?
Elk genest object wordt een afzonderlijke Java-klasse. Als een JSON-veld genaamd "address" een object bevat met sleutels "street" en "city", maakt de converter een Address-klasse met die velden en typeert het bovenliggende veld als Address. Diep geneste structuren produceren meerdere klassedefinities.
Wat gebeurt er wanneer een JSON-veld null is?
Null-velden worden getypeerd als Object omdat de converter het beoogde type niet kan afleiden uit een null-waarde alleen. In de praktijk vervang je Object door het verwachte type (String, Integer, etc.) zodra je het API-contract kent. Bij gebruik van Jackson worden null-waarden standaard toegewezen aan referentietype-velden zonder fouten.
Moet ik Java Records gebruiken in plaats van POJO's voor JSON?
Records werken goed voor onveranderlijke data transfer-objecten waarbij je geen setters nodig hebt. Jackson ondersteunt records vanaf versie 2.12, en Gson voegde ondersteuning toe in latere releases. Als je project op Java 16+ draait en je API-responses behandelt als alleen-lezen data, verminderen records boilerplate. Als je veranderlijkheid nodig hebt of Java 8/11 als doelplatform hebt, houd je vast aan POJO's.
Hoe ga ik om met JSON-sleutels die geen geldige Java-identifiers zijn?
JSON-sleutels zoals "first-name" of "2nd_place" zijn geen geldige Java-veldnamen. Gebruik @JsonProperty("first-name") in Jackson of @SerializedName("first-name") in Gson om de JSON-sleutel te koppelen aan een geldige Java-veldnaam zoals firstName. De converter converteert sleutelnamen automatisch naar camelCase Java-velden.
Kan ik Java-klassen genereren vanuit een JSON Schema in plaats van een JSON-sample?
Deze tool genereert klassen vanuit JSON-datasamples. Voor JSON Schema-invoer gebruik je het jsonschema2pojo-project (beschikbaar als CLI-tool, Maven-plugin en Gradle-plugin). Het leest een JSON Schema-bestand en produceert geannoteerde Java-klassen met validatiebeperkingen, standaardwaarden en documentatie uit de schemabeschrijvingen.