JSON ke Kelas Java

Tempel contoh JSON, lalu generator menghasilkan satu atau beberapa kelas Java dengan tipe bidang yang tepat, getter, setter, dan anotasi pustaka JSON. Mendukung Jackson (@JsonProperty), Gson (@SerializedName), dan Lombok (@Data/@Builder) untuk kode yang lebih bersih. Objek bersarang menjadi kelas internal atau kelas saudara, tergantung tata letak yang Anda pilih.

Cara Mengonversi JSON ke Java

  1. 1

    Tempel JSON

    Satu contoh sudah cukup; beberapa contoh meningkatkan pendeteksian apakah suatu bidang boleh bernilai null.

  2. 2

    Pilih pustaka

    Jackson (paling umum di Spring), Gson (untuk Android dan beberapa proyek lama), atau POJO biasa tanpa anotasi.

  3. 3

    Pilih opsi tambahan

    Lombok untuk getter/setter yang dibuat otomatis, pola builder, serta equals/hashCode. Atau biarkan sederhana tanpa tambahan.

  4. 4

    Pilih gaya bersarang

    Kelas saudara dalam berkas yang sama (kelas public pada Java 17+ harus berada di berkas terpisah) atau kelas statis bersarang.

  5. 5

    Salin kode

    Tempel ke proyek Anda. Nama kelas cocok dengan kunci JSON; paket diatur sesuai konfigurasi Anda.

Contoh keluaran: Jackson + Lombok

Masukan:

{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }

Keluaran:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @JsonProperty("firstName")
    private String firstName;

    @JsonProperty("age")
    private int age;

    @JsonProperty("address")
    private Address address;
}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {
    @JsonProperty("city")
    private String city;
}

Pemetaan Tipe

JSON Tipe Java
string String
bilangan bulat (≤ Integer.MAX) Integer / int
bilangan bulat besar Long / BigInteger
desimal Double / BigDecimal
boolean Boolean / boolean
tanggal ISO LocalDate (Jackson JSR-310)
tanggal dan waktu ISO Instant / OffsetDateTime
null (dengan bidang saudara yang bukan null) Tipe pembungkus (mis. Integer)
array List<T>
objek kelas bersarang

Memilih antara tipe pembungkus dan tipe primitif

  • Primitif (int, long, boolean), tidak bisa null, efisien, tanpa auto-boxing.
  • Pembungkus (Integer, Long, Boolean), bisa null, diperlukan jika bidang tersebut mungkin tidak ada atau bernilai null di JSON.

Secara bawaan, generator menggunakan tipe pembungkus untuk apa pun yang dianggap bisa null, dan tipe primitif untuk sisanya.

Jackson vs Gson

Fitur Jackson Gson
Keumuman di Spring Ya, bawaan Tidak (perlu konfigurasi)
Kinerja Lebih cepat Lebih lambat
Dukungan tanggal JSR-310 Melalui modul tambahan Melalui modul tambahan
Polimorfisme @JsonTypeInfo RuntimeTypeAdapter
Toleransi koma di akhir Tidak (bawaan) Ya

Kesalahan Umum

  • Menggunakan tipe primitif untuk bidang yang bisa null. int tidak bisa bernilai null; Jackson akan melempar kesalahan jika JSON berisi "age": null. Gunakan Integer.
  • Modul tanggal yang hilang. Jackson memerlukan jackson-datatype-jsr310 untuk Instant/LocalDate. Tanpanya, tanggal beralih ke String atau nilai long epoch.
  • Berbagi tipe pembungkus antar kelas yang tidak berkaitan. Jika dua bentuk JSON sama-sama memiliki Address bersarang, generator membuat dua kelas Address. Ganti nama atau satukan secara manual.
  • Lupa @JsonIgnoreProperties(ignoreUnknown = true). Jackson yang ketat melempar kesalahan pada properti yang tidak dikenal; tambahkan anotasi ini (atau atur secara global) untuk deserialisasi yang toleran.

Pertanyaan yang Sering Diajukan

Dalam kebanyakan kasus Jackson, ini bawaan Spring, lebih cepat, dan dukungan polimorfismenya lebih kaya. Gson lebih ringan dan lebih dikenal di Android, meski proyek Android semakin banyak memakai Moshi atau kotlinx.serialization.

Lombok memangkas banyak kode boilerplate (getter, setter, equals, hashCode, builder). Ia digunakan secara luas, tetapi memerlukan annotation processor Lombok dalam proses build. Nonaktifkan jika proyek Anda menghindari Lombok demi kebersihan dependensi.

Bidang yang bernilai null di salah satu contoh yang diamati akan menjadi tipe pembungkus (Integer alih-alih int) agar dapat menampung null. Jackson kemudian mendeserialisasi "age": null tanpa kesalahan. Tambahkan @JsonInclude(Include.NON_NULL) untuk melewati nilai null saat serialisasi.

Ya, jika Anda memilih “record”. Record ringkas, tidak dapat diubah, dan kompatibel dengan Jackson 2.12+. Untuk proyek Spring Boot 3, kombinasi record dengan pembuatan tanpa Lombok adalah pilihan modern.

Alat Terkait

Alat ini tersedia dalam bahasa lain