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
Generator Konfigurasi Webpack
Buat webpack.config.js untuk webpack 5 dari formulir singkat: atur entry, folder output, dan mode, lalu aktifkan TypeScript, Babel, loader CSS, HtmlWebpackPlugin, dan dev server.
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.
Dari SQL ke NoSQL
Ubah satu pernyataan SQL SELECT menjadi kueri find() MongoDB. Memetakan kolom, WHERE (=, >, <, >=, <=, !=), AND/OR, ORDER BY, dan LIMIT. Tanpa JOIN, GROUP BY, atau agregasi.
Validator XSD
Validasi dokumen XML terhadap skema XSD dan laporkan ketidakcocokan elemen dan tipe dengan nomor baris persis.
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.
Generator Slug
Konversi judul atau frasa apa pun menjadi slug yang aman untuk URL: huruf kecil, dipisahkan dengan tanda hubung, tanpa aksen, opsi membuang stop word, serta kompatibel dengan Unicode.
Alat ini tersedia dalam bahasa lain
- JSON إلى فئة Java [AR]
- JSON till Java-klass [SV]
- JSON から Java クラスへ [JA]
- JSON เป็นคลาส Java [TH]
- JSON sang lớp Java [VI]
- JSON zu Java-Klasse [DE]
- JSON을 Java 클래스로 [KO]
- JSON a Clase Java [ES]
- JSON na klasę Java [PL]
- JSON para Classe Java [PT]
- JSON naar Java-klasse [NL]
- JSON vers classe Java [FR]
- JSON to Java Class [EN]
- JSON in classe Java [IT]
- JSON в класс Java [RU]
- JSON'dan Java Sınıfına [TR]
- JSON 转 Java 类 [ZH]