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. 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. 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. 3

    Ek seçenekleri belirleyin

    Otomatik üretilen getter/setter, builder deseni ve equals/hashCode için Lombok. Ya da sade bırakın.

  4. 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. 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. int null olamaz; JSON’da "age": null varsa Jackson hata fırlatır. Integer kullanın.
  • Eksik tarih modülleri. Jackson, Instant/LocalDate için jackson-datatype-jsr310 gerektirir. Bu olmadan tarihler String’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 Address içeriyorsa üreteç iki Address sı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

Araç diğer dillerde mevcuttur