JSON to Java

Buat kelas Java POJO dari JSON

Coba contoh
Nama root class:

Input JSON

Output Java

Berjalan lokal ยท Aman untuk menempel rahasia
Kelas Java akan muncul di siniโ€ฆ

Apa itu Konversi JSON ke Kelas Java?

Konversi JSON ke kelas Java mengambil objek JSON mentah dan menghasilkan definisi Plain Old Java Object (POJO) dengan field private, getter, dan setter. Java tidak memiliki sistem tipe JSON bawaan, sehingga setiap respons API JSON, file konfigurasi, atau payload pesan memerlukan class yang sesuai sebelum Anda dapat menggunakannya secara type-safe. Library seperti Jackson dan Gson memetakan kunci JSON ke field Java melalui reflection, tetapi mereka memerlukan definisi class yang sudah ada terlebih dahulu.

Sebuah Java POJO standar untuk deserialisasi JSON mendeklarasikan field private untuk setiap kunci JSON, konstruktor tanpa argumen, dan pasangan getter/setter per field. Objek JSON bersarang menjadi class terpisah. Array menjadi field List<T> dengan impor java.util.List. Tipe JSON primitif dipetakan ke tipe primitif Java (int, double, boolean) atau tipe wrapper-nya (Integer, Double, Boolean) saat digunakan di dalam generik. Nilai null biasanya dipetakan ke Object atau tipe referensi nullable.

Menulis definisi class ini secara manual adalah pekerjaan yang berulang. Anda membaca setiap kunci JSON, menentukan tipe Java dari nilainya, mengonversi konvensi penamaan dari camelCase JSON ke field Java camelCase, membuat nama class PascalCase untuk objek bersarang, dan menambahkan boilerplate getter/setter. Untuk objek JSON dengan 15 field dan 3 objek bersarang, itu berarti menulis 4 class, 30+ metode, dan menjaga semuanya tetap konsisten. Sebuah konverter melakukan ini dalam hitungan milidetik.

Mengapa Menggunakan Konverter JSON ke Java?

Membuat Java POJO dari JSON secara manual berarti memeriksa setiap field, menyimpulkan tipe dari nilai sampel, menulis pasangan getter/setter, dan mengulangi proses untuk setiap objek bersarang. Ketika kontrak API berubah, Anda memperbarui semuanya secara manual. Sebuah konverter menghilangkan pekerjaan mekanis tersebut.

โšก
Pembuatan POJO secara instan
Tempelkan JSON Anda dan dapatkan definisi kelas Java yang lengkap dalam kurang dari satu detik. Objek bersarang, list, dan tipe primitif dideteksi dan dipetakan secara otomatis.
๐Ÿ”’
Pemrosesan yang mengutamakan privasi
Konversi berjalan sepenuhnya di browser Anda menggunakan JavaScript. Data JSON Anda tidak pernah meninggalkan perangkat Anda. Kunci API, token, dan data produksi tetap bersifat pribadi.
๐Ÿ“
Inferensi tipe yang tepat
Setiap field yang dihasilkan menggunakan tipe Java yang sesuai yang disimpulkan dari nilai JSON: String, int, double, boolean, List<T>, atau Object untuk nilai null. Tipe wrapper digunakan di dalam generik.
๐Ÿ“ฆ
Tanpa instalasi atau pendaftaran
Buka halaman dan tempelkan JSON Anda. Tidak perlu JDK, tidak ada dependensi Maven, tidak ada akun. Berfungsi di perangkat apa pun dengan browser.

Kasus Penggunaan JSON ke Java

Pengembangan API Spring Boot
Buat request dan response DTO dari sampel JSON API. Tempelkan bentuk payload yang diharapkan dan dapatkan kelas Java yang siap digunakan dengan anotasi @RequestBody dan @ResponseBody di controller Spring.
Pengembangan Aplikasi Android
Buat kelas model untuk respons jaringan Retrofit atau Volley. Tempelkan JSON yang dikembalikan oleh API backend Anda dan dapatkan POJO yang kompatibel dengan konverter Gson atau Moshi.
Integrasi Microservice
Definisikan kelas pesan bertipe untuk payload JSON Kafka, RabbitMQ, atau gRPC. Tempelkan sampel pesan dan buat POJO yang mendokumentasikan kontrak yang diharapkan antar layanan.
Migrasi Sistem Lama
Konversi respons JSON API menjadi kelas Java saat membungkus endpoint REST dalam klien bertipe. Berguna saat bermigrasi dari pola Map<String, Object> yang tidak bertipe ke model domain yang tepat.
QA dan Otomasi Pengujian
Buat fixture pengujian bertipe dari sampel respons API. Engineer QA dapat menempelkan respons JSON nyata dan menghasilkan definisi POJO untuk digunakan dalam test suite JUnit atau TestNG dengan asersi AssertJ.
Belajar Pola OOP Java
Mahasiswa dapat menempelkan struktur JSON apa pun dan melihat bagaimana Java merepresentasikannya dengan class, field, getter, setter, dan tipe bersarang. Hasilnya membuat konsep tersebut menjadi konkret, bukan abstrak.

Pemetaan Tipe JSON ke Java

Setiap nilai JSON dipetakan ke tipe Java yang spesifik. Tabel di bawah menunjukkan cara konverter menerjemahkan setiap tipe JSON ke padanannya di Java. Kolom Alternatif menampilkan tipe wrapper yang digunakan dalam konteks generik seperti List<T>, atau fitur Java yang lebih baru seperti Records.

Tipe JSONContohTipe JavaAlternatif
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>

Referensi Anotasi JSON Java

Saat melakukan deserialisasi JSON dengan Jackson atau Gson, anotasi mengontrol cara kunci JSON dipetakan ke field Java, cara field yang tidak dikenal ditangani, dan cara nilai null diperlakukan. Referensi ini mencakup anotasi yang paling sering Anda temui saat bekerja dengan POJO yang dihasilkan.

AnotasiTujuanLibrary
@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 memiliki tiga pendekatan umum untuk mendefinisikan struktur bertipe guna menyimpan data JSON. Masing-masing cocok untuk gaya proyek dan versi Java yang berbeda. POJO adalah pola tradisional dengan kompatibilitas terluas. Record mengurangi boilerplate untuk data yang tidak dapat diubah. Lombok menghasilkan getter, setter, dan konstruktor pada waktu kompilasi melalui anotasi.

POJO
Pola Java tradisional. Berfungsi dengan Java 8+. Anda mendefinisikan field private beserta metode getter/setter. Kontrol penuh atas mutabilitas dan logika kustom. Kompatibel dengan setiap library JSON (Jackson, Gson, Moshi). Pilihan standar untuk Spring Boot, Android, dan codebase enterprise.
Record (Java 16+)
Tersedia sejak Java 16 (pratinjau di versi 14). Sintaks ringkas: record User(int id, String name) menghasilkan konstruktor, aksesor, equals, hashCode, dan toString. Instance bersifat immutable. Jackson mendukung record mulai versi 2.12. Terbaik untuk objek nilai dan DTO yang tidak memerlukan setter.
Lombok @Data
Annotation processor pihak ketiga yang bekerja pada waktu kompilasi. @Data menghasilkan getter, setter, equals, hashCode, dan toString. @Builder menambahkan pola builder. Mengurangi boilerplate hingga mendekati level Record sambil tetap mempertahankan mutabilitas. Memerlukan penambahan Lombok ke build tool (Maven/Gradle) dan plugin IDE.

Contoh Kode

Contoh-contoh ini menunjukkan cara menggunakan Java POJO yang dihasilkan dengan Jackson untuk deserialisasi, cara membuat kelas Java secara programatik dari JavaScript dan Python, dan cara menggunakan alat CLI jsonschema2pojo untuk pembuatan massal.

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

Pertanyaan yang Sering Diajukan

Apa perbedaan antara POJO dan Java Bean?
POJO (Plain Old Java Object) adalah kelas Java sederhana apa pun tanpa ketergantungan framework. Java Bean adalah POJO yang mengikuti konvensi tertentu: konstruktor tanpa argumen, field private dengan getter dan setter publik, dan mengimplementasikan Serializable. Untuk pemetaan JSON, sebagian besar library memerlukan konvensi Bean (getter/setter) tetapi tidak memerlukan Serializable. Kelas yang dihasilkan oleh alat ini mengikuti pola getter/setter Bean.
Library JSON mana yang sebaiknya digunakan dengan POJO yang dihasilkan?
Jackson (com.fasterxml.jackson) adalah library JSON Java yang paling banyak digunakan dan merupakan default di Spring Boot. Gson (com.google.gson) populer dalam proyek Android dan memiliki API yang lebih sederhana. Moshi adalah alternatif yang lebih baru dari Square, dirancang untuk interoperabilitas dengan Kotlin. Ketiganya berfungsi dengan POJO standar yang memiliki getter dan setter.
Bagaimana konverter menangani objek JSON bersarang?
Setiap objek bersarang menjadi kelas Java terpisah. Jika field JSON bernama "address" berisi objek dengan kunci "street" dan "city", konverter membuat kelas Address dengan field-field tersebut dan menentukan tipe field induk sebagai Address. Struktur yang sangat bersarang menghasilkan beberapa definisi kelas.
Apa yang terjadi ketika field JSON bernilai null?
Field null diberi tipe Object karena konverter tidak dapat menyimpulkan tipe yang dimaksud hanya dari nilai null. Dalam praktiknya, Anda akan mengganti Object dengan tipe yang diharapkan (String, Integer, dll.) setelah Anda mengetahui kontrak API. Jika menggunakan Jackson, nilai null ditetapkan ke field tipe referensi secara default tanpa error.
Haruskah saya menggunakan Java Record alih-alih POJO untuk JSON?
Record berfungsi baik untuk objek transfer data yang tidak dapat diubah di mana Anda tidak memerlukan setter. Jackson mendukung record mulai versi 2.12, dan Gson menambahkan dukungan di rilis berikutnya. Jika proyek Anda berjalan di Java 16+ dan Anda memperlakukan respons API sebagai data read-only, record mengurangi boilerplate. Jika Anda memerlukan mutabilitas atau menargetkan Java 8/11, tetap gunakan POJO.
Bagaimana cara menangani kunci JSON yang bukan identifier Java yang valid?
Kunci JSON seperti "first-name" atau "2nd_place" bukan nama field Java yang valid. Gunakan @JsonProperty("first-name") di Jackson atau @SerializedName("first-name") di Gson untuk memetakan kunci JSON ke nama field Java yang valid seperti firstName. Konverter secara otomatis mengonversi nama kunci ke field Java camelCase.
Bisakah saya membuat kelas Java dari JSON Schema alih-alih sampel JSON?
Alat ini menghasilkan kelas dari sampel data JSON. Untuk input JSON Schema, gunakan proyek jsonschema2pojo (tersedia sebagai alat CLI, plugin Maven, dan plugin Gradle). Alat tersebut membaca file JSON Schema dan menghasilkan kelas Java beranotasi dengan constraint validasi, nilai default, dan dokumentasi dari deskripsi schema.