Help

JSON naar POJO: Java-klassen of records uit JSON

Plak je JSON en krijg kant-en-klare Java: een klasse voor elk object, met private velden, een constructor zonder argumenten en getters en setters, of Java-records als je dat liever hebt. Geneste objecten staan binnen hun bovenliggende klasse, zodat het hele resultaat in één .java-bestand past. Voeg Jackson- of Gson-annotaties toe als je de oorspronkelijke JSON-sleutels nodig hebt. De omzetting gebeurt in je browser en je JSON wordt niet geüpload.


JSON to POJO online: zo ga je te werk

  1. Plak de JSON in het vak JSON (daar staat “Plak hier je JSON...”). Geplakte tekst wordt meteen omgezet. Als je typt, wordt de code ongeveer 300 milliseconden nadat je stopt bijgewerkt.
  2. Lees de klassen onder Java-code. Een regel eronder, zoals “2 klassen gegenereerd.”, laat zien hoeveel er zijn geschreven.
  3. Kies direct onder de code Kopiëren. De knop toont even “Gekopieerd”. Sla de code op in een bestand dat naar de hoofdklasse heet, bijvoorbeeld Root.java.
  4. Om het resultaat te veranderen, open je Instellingen: vul de Naam van de hoofdklasse in (standaard Root), kies bij Annotaties tussen Geen, Jackson en Gson, of vink Records gebruiken in plaats van klassen aan. De code wordt bijgewerkt zodra je een instelling wijzigt.
  5. Kies Wissen om het vak leeg te maken en opnieuw te beginnen.

JSON POJO Java: een voorbeeld

Dit plak je: { "user_id": 7, "name": "Ana", "price": 4.5, "tags": ["a", "b"], "address": { "city": "Kyoto" } }

Met Annotaties op “Geen” begint het resultaat met import java.util.List; en public class Root. De velden zijn Integer userId, String name, Double price, List<String> tags en Address address. Daarna volgen de constructor zonder argumenten en getters en setters zoals getUserId en setUserId.

Het geneste object address werd Address, een public static class binnen Root, en daarom is één bestand genoeg. De sleutel user_id werd het veld userId. De statusregel waarschuwt je: “1 veldnaam is aangepast aan Java.”

JSON naar Java record met Jackson-annotaties

Zet de Naam van de hoofdklasse op Order, kies bij Annotaties voor Jackson en vink Records gebruiken in plaats van klassen aan. Dezelfde JSON wordt dan public record Order(...).

Elk recordonderdeel krijgt @JsonProperty("key") met de oorspronkelijke JSON-sleutel, dus user_id wordt nog steeds aan userId gekoppeld. Kies je Gson, dan krijgen dezelfde onderdelen @SerializedName("key"), met de Gson-import. Records vereisen Java 16 of nieuwer.

Hoe JSON-types Java-types worden

Alle types zijn omhulde types, dus elk veld mag ontbreken of null zijn.

Getallen worden precies gelezen zoals ze er staan, dus een lang ID wordt nooit afgerond. Imports verschijnen alleen als de code ze nodig heeft. Komt een sleutel twee keer voor in hetzelfde object, dan wint de laatste.

Hoe klassen- en veldnamen worden gekozen

De naam van de hoofdklasse wordt opgeschoond tot een geldige Java-naam, en een leeg vak geeft Root. Begint de JSON zelf met een array van objecten, dan beschrijft Root één item en zegt de pagina dat je de JSON als List<Root> moet lezen.

Als de JSON niet wordt geaccepteerd

De lezer is streng, net als JSON zelf: commentaar, enkele aanhalingstekens en komma’s aan het einde zijn fouten. Onder “Kan deze JSON niet lezen” staat een duidelijke reden met de positie, zoals “Regel 3, kolom 5”, bijvoorbeeld “De parser stopte bij “}”. Controleer of er vlak ervoor een komma, dubbele punt, haakje of aanhalingsteken ontbreekt.”

Geldige JSON zonder object, zoals 42 of een array van getallen, toont “Deze JSON bevat geen object om een klasse van te maken.” Tekst van meer dan 2.000.000 tekens wordt geweigerd, net als nesting dieper dan 200 niveaus.


Veelgestelde vragen

Hoe maak ik van JSON een POJO in Java?

Plak de JSON in het vak “JSON” en kopieer de code onder “Java-code”. Je krijgt één klasse per JSON-object, met private velden, een publieke constructor zonder argumenten en publieke getX- en setX-methoden. Sla de code op in een bestand dat naar de hoofdklasse heet, bijvoorbeeld Root.java, en lees de JSON daarna met Jackson of Gson.

Hoe zet ik een JSON-array om in Java-objecten?

Plak de array van objecten zoals hij is. De tool beschrijft één item van de array als de hoofdklasse en zegt dat je de JSON als List moet lezen. In Jackson is dat een TypeReference>, in Gson een TypeToken>. Een array binnen een object wordt een veld List, met een klasse die naar de sleutel is genoemd.

Hoe behoud ik de originele JSON-sleutels met Jackson of Gson?

Open “Instellingen” en kies onder “Annotaties” Jackson of Gson. Jackson voegt @JsonProperty("key") toe en Gson @SerializedName("key"), bij elk veld, samen met de import. Bij “Geen” wordt een sleutel als user_id het veld userId, dat niet meer terug naar de JSON verwijst tenzij de oorspronkelijke sleutel via een annotatie of een naamstrategie behouden blijft.

Kan ik Java-records uit JSON genereren?

Ja. Vink onder “Instellingen” “Records gebruiken in plaats van klassen” aan. Elk JSON-object wordt public record Name(Type a, Type b) {}, en geneste objecten worden records binnen het bovenliggende record. Records vereisen Java 16 of nieuwer. Annotaties werken nog steeds en komen bij elk recordonderdeel te staan.

Waarom is een JSON-getal op de ene plek een Integer en op de andere een Double?

Het type volgt uit hoe het getal is geschreven. Een geheel getal is een Integer, of een Long als het te groot is voor een Integer, of een BigInteger als het te groot is voor een Long. Een getal met een decimale punt of exponent is een Double, ook als er achter de punt alleen een nul staat.

Wat gebeurt er als de objecten in een array verschillende sleutels hebben?

Ze worden samengevoegd tot één klasse met elke sleutel die in een van de objecten voorkomt, dus ook sleutels die maar sommige objecten hebben, krijgen een veld. Heeft een sleutel verschillende types of is een array leeg, dan krijgt het veld het type Object of List. Controleer die velden met de hand.

Genereert de tool Kotlin-klassen of Lombok-annotaties?

Nee. De uitvoer is gewoon Java: klassen met getters en setters, of records. Gebruik je Lombok, verwijder dan de getter- en settermethoden en zet @Data op de klasse. Een Kotlin data class moet je apart schrijven.

Uploadt deze JSON to Java converter online mijn JSON, en hoe groot mag die zijn?

Tot 2.000.000 tekens, met maximaal 200 niveaus nesting. De omzetting draait in je browser, dus de JSON wordt nergens geüpload of opgeslagen.

Aanbevolen

Help de tools gratis te houden. ✨

Afbeeldingen dienen ter illustratie. Als Amazon-Partner verdien ik aan in aanmerking komende aankopen.