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
Tempel JSON
Satu contoh sudah cukup; beberapa contoh meningkatkan pendeteksian apakah suatu bidang boleh bernilai null.
-
2
Pilih pustaka
Jackson (paling umum di Spring), Gson (untuk Android dan beberapa proyek lama), atau POJO biasa tanpa anotasi.
-
3
Pilih opsi tambahan
Lombok untuk getter/setter yang dibuat otomatis, pola builder, serta equals/hashCode. Atau biarkan sederhana tanpa tambahan.
-
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
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.
inttidak bisa bernilai null; Jackson akan melempar kesalahan jika JSON berisi"age": null. GunakanInteger. - Modul tanggal yang hilang. Jackson memerlukan
jackson-datatype-jsr310untukInstant/LocalDate. Tanpanya, tanggal beralih keStringatau nilai long epoch. - Berbagi tipe pembungkus antar kelas yang tidak berkaitan. Jika dua bentuk JSON sama-sama memiliki
Addressbersarang, generator membuat dua kelasAddress. 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
Referensi Tabel ASCII
Tabel ASCII lengkap dari 0 sampai 127 dengan desimal, heksadesimal, oktal, biner, dan referensi karakter numerik HTML untuk setiap karakter, termasuk kode kontrol seperti NUL, LF, dan DEL.
Referensi Karakter HTML
Daftar entitas HTML yang dapat dicari, beserta kode bernama dan kode numeriknya, serta fitur salin dengan satu klik untuk karakter khusus dan simbol.
Referensi pintasan papan ketik
Cari pintasan bawaan terdokumentasi untuk VS Code, Chrome, dan Bash dengan GNU Readline di macOS, Windows, dan Linux.
Pemformat HTML
Format HTML secara lokal di browser dengan inden dua atau empat spasi. HTML tidak diunggah atau divalidasi.
Generator EditorConfig
Buat file .editorconfig dengan gaya dan ukuran indentasi, akhir baris, charset, dan aturan spasi Anda untuk format yang konsisten di berbagai IDE dan editor.
Validator Email
Validasi alamat email: pemeriksaan sintaks RFC 5322, pengecekan live record MX, serta detail bagian lokal, domain, dan panjang. Tidak ada email yang dikirim.
Alat ini tersedia dalam bahasa lain
- JSON sang lớp Java [VI]
- JSON a Clase Java [ES]
- JSON vers classe Java [FR]
- JSON을 Java 클래스로 [KO]
- JSON naar Java-klasse [NL]
- JSON till Java-klass [SV]
- JSON から Java クラスへ [JA]
- JSON เป็นคลาส Java [TH]
- JSON إلى فئة Java [AR]
- JSON zu Java-Klasse [DE]
- JSON na klasę Java [PL]
- JSON para Classe Java [PT]
- JSON in classe Java [IT]
- JSON в класс Java [RU]
- JSON'dan Java Sınıfına [TR]
- JSON 转 Java 类 [ZH]
- JSON to Java Class [EN]