JSON'dan Java Sınıfına
Bir JSON örneği yapıştırın; üreteç, doğru alan tiplerine, getter, setter ve JSON kütüphanesi anotasyonlarına sahip bir veya daha fazla Java sınıfı üretir. Daha temiz kod için Jackson (@JsonProperty), Gson (@SerializedName) ve Lombok (@Data/@Builder) desteklenir. İç içe nesneler, seçtiğiniz düzene göre iç sınıflara veya kardeş sınıflara dönüşür.
JSON'ı Java'ya nasıl dönüştürürsünüz?
-
1
JSON'u yapıştırın
Tek bir örnek yeterlidir; birden fazla örnek, bir alanın null olup olamayacağını daha iyi belirlemenizi sağlar.
-
2
Kütüphaneyi seçin
Jackson (Spring'te en yaygın), Gson (Android ve bazı eski projeler için) veya anotasyonsuz basit bir POJO.
-
3
Ek seçenekleri belirleyin
Otomatik üretilen getter/setter, builder deseni ve equals/hashCode için Lombok. Ya da sade bırakın.
-
4
İç içe stilini seçin
Aynı dosyadaki kardeş sınıflar (Java 17+ sürümünde public sınıflar ayrı dosyalarda olmalıdır) veya iç içe statik sınıflar.
-
5
Kodu kopyalayın
Projenize yapıştırın. Sınıf adları JSON anahtarlarıyla eşleşir; paket, yapılandırdığınız değere ayarlanır.
Örnek çıktı: Jackson + Lombok
Girdi:
{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }
Çıktı:
@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;
}
Tür eşlemesi
| JSON | Java tipi |
|---|---|
| karakter dizisi | String |
| tam sayı (≤ Integer.MAX) | Integer / int |
| büyük tam sayı | Long / BigInteger |
| ondalık | Double / BigDecimal |
| boole değeri | Boolean / boolean |
| ISO tarihi | LocalDate (Jackson JSR-310) |
| ISO tarih ve saat | Instant / OffsetDateTime |
| null (null olmayan bir kardeş alanla) | Sarmalayıcı tip (örn. Integer) |
| dizi | List<T> |
| nesne | iç içe sınıf |
Sarmalayıcı tip ile ilkel tip arasında seçim
- İlkel (
int,long,boolean), null olamaz, verimlidir, otomatik kutulama (auto-boxing) yoktur. - Sarmalayıcı (
Integer,Long,Boolean), null olabilir; alan JSON’da eksik olabilir veya null olabilirse gereklidir.
Üreteç, null olabileceği kabul edilen her şey için varsayılan olarak sarmalayıcı tipi, aksi halde ilkel tipi kullanır.
Jackson ve Gson karşılaştırması
| Özellik | Jackson | Gson |
|---|---|---|
| Spring’te yaygınlık | Evet, varsayılan | Hayır (yapılandırma gerekir) |
| Performans | Daha hızlı | Daha yavaş |
| JSR-310 tarih desteği | Ek modül aracılığıyla | Ek modül aracılığıyla |
| Çok biçimlilik | @JsonTypeInfo |
RuntimeTypeAdapter |
| Sondaki virgüle tolerans | Hayır (varsayılan) | Evet |
Yaygın hatalar
- null olabilen alanlar için ilkel tip kullanmak.
intnull olamaz; JSON’da"age": nullvarsa Jackson hata fırlatır.Integerkullanın. - Eksik tarih modülleri. Jackson,
Instant/LocalDateiçinjackson-datatype-jsr310gerektirir. Bu olmadan tarihlerString’e veya epoch long değerlerine geri döner. - İlgisiz sınıflar arasında sarmalayıcı tipleri paylaşmak. İki JSON yapısı da iç içe bir
Addressiçeriyorsa üreteç ikiAddresssınıfı oluşturur. Elle yeniden adlandırın veya birleştirin. @JsonIgnoreProperties(ignoreUnknown = true)eklemeyi unutmak. Katı Jackson bilinmeyen özelliklerde hata fırlatır; hoşgörülü seri durumdan çıkarma için bu anotasyonu ekleyin (veya genel olarak yapılandırın).
Sık Sorulan Sorular
Çoğu durumda Jackson, Spring’in varsayılanıdır, daha hızlıdır ve daha zengin çok biçimlilik desteğine sahiptir. Gson daha hafiftir ve Android’de daha iyi bilinir; ancak Android projeleri giderek daha çok Moshi veya kotlinx.serialization kullanıyor.
Lombok çok sayıda tekrarlı kodu (getter, setter, equals, hashCode, builder) azaltır. Yaygın kullanılır ama derlemede Lombok anotasyon işlemcisini gerektirir. Projeniz bağımlılık hijyeni nedeniyle Lombok’tan kaçınıyorsa devre dışı bırakın.
Gözlemlenen herhangi bir örnekte null olan alanlar, null tutabilmeleri için sarmalayıcı tipe (int yerine Integer) dönüşür. Böylece Jackson "age": null ifadesini hatasız seri durumdan çıkarır. Seri hâle getirirken null değerleri atlamak için @JsonInclude(Include.NON_NULL) ekleyin.
Evet, “record” seçerseniz. Record’lar özlüdür, değişmezdir ve Jackson 2.12+ ile çalışır. Spring Boot 3 projeleri için record ile Lombok’suz üretimin birleşimi modern seçimdir.
İlgili Araçlar
ASCII Tablosu Referansı
NUL, LF ve DEL dahil her kod için ondalık, onaltılık, sekizlik ve ikili değerlerle HTML sayısal karakter başvurusu gösterimini sunan tam ASCII tablosu.
HTML Karakter Referansı
HTML varlıklarının aranabilir listesi; adlandırılmış ve sayısal kodlarıyla birlikte özel karakter ve semboller için tek tıkla kopyalama.
Klavye kısayolları başvurusu
macOS, Windows ve Linux’ta VS Code, Chrome ve GNU Readline kullanan Bash için belgelenmiş varsayılan kısayolları arayın.
FPS Sayacı
requestAnimationFrame ile tarayıcı FPS değerini ölçün: yumuşatma, en düşük ve en yüksek kare hızı, uyarı eşiği ve isteğe bağlı grafik. Yerel çalışır, yükleme ve API yoktur.
EditorConfig Oluşturucu
Girinti stili ve boyutu, satır sonu, karakter kümesi ve boşluk kurallarınızla bir .editorconfig dosyası oluşturarak IDE ve editörler arasında tutarlı biçimlendirme sağlayın.
E-posta Doğrulayıcı
Bir e-posta adresini doğrulayın: RFC 5322 sözdizimi kontrolü, canlı MX kaydı sorgulama, ayrıca yerel kısım, alan adı ve uzunluk bilgileri. Hiçbir e-posta gönderilmez.
Araç diğer dillerde mevcuttur
- JSON para Classe Java [PT]
- JSON sang lớp Java [VI]
- JSON から Java クラスへ [JA]
- JSON을 Java 클래스로 [KO]
- JSON a Clase Java [ES]
- JSON إلى فئة Java [AR]
- JSON naar Java-klasse [NL]
- JSON till Java-klass [SV]
- JSON เป็นคลาส Java [TH]
- JSON vers classe Java [FR]
- JSON ke Kelas Java [ID]
- JSON zu Java-Klasse [DE]
- JSON na klasę Java [PL]
- JSON in classe Java [IT]
- JSON в класс Java [RU]
- JSON 转 Java 类 [ZH]
- JSON to Java Class [EN]