araç köşesi

JSON'dan Java Sınıfına (POJO)

Örnek JSON'dan derlenebilir Java sınıfı üretin; iç içe nesneler ayrı sınıf, eksik alanlar sarmal tip olur

Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.

Nasıl çalışır?

Bir REST API'nin yanıtını Java'da nesne olarak okumak için önce o JSON'un sınıflarını yazmanız gerekir; alan sayısı arttıkça bunu elle yapmak hem uzun hem hataya açıktır. Örnek yanıtı sol panele yapıştırın, kök sınıf adını yazın (ör. Siparis); Java kodu sağ panelde oluşur. Her iç içe nesne kendi sınıfı olur ve kök sınıfın içine public static class olarak yazılır, böylece çıktı tek bir Siparis.java dosyası olarak derlenir. Nesne listesi List<...> olur ve öğe sınıfının adı listenin adının tekilidir: "kalemler" → Kalem, "items" → Item. Listedeki bütün kayıtlar tek tipe birleştirilir: bir kayıtta olmayan alan da sınıfta yer alır ve Integer, Double, Boolean gibi sarmal tiple yazılır ki null taşıyabilsin. Tam sayı int, 2 milyarı aşan tam sayı long, ondalıklı sayı double olur; tür JSON metnindeki yazımdan okunur, 1250.0 double kalır. "musteri_adi" gibi anahtar Java kuralına göre musteriAdi alanına dönüşür ve Jackson'ın okuyabilmesi için @JsonProperty("musteri_adi") etiketi eklenir. record seçerseniz Java 16 ve sonrası için kısa, değişmez tipler üretilir.

Bu araç json to java, json to pojo, json to java class, json java record aramalarıyla da biliniyor.

POJO nedir?

POJO (Plain Old Java Object), hiçbir çerçeveye bağlı olmayan sade Java sınıfıdır: private alanlar, parametresiz kurucu ve alanlara erişen getter/setter metotları. Jackson, Gson ve Spring bir JSON'u Java nesnesine çevirirken tam bu yapıyı bekler; alan adları JSON anahtarlarıyla eşleşir. Bu yüzden bir API'yi Java'dan kullanmanın ilk adımı, yanıtın POJO'larını yazmaktır.

Java record nedir?

record, Java 16 ile gelen ve yalnız veri taşımak için tasarlanmış kısa sınıf biçimidir: record Kalem(String urun, int adet) {} satırı alanları, kurucuyu, okuyucuları, equals ve hashCode'u kendiliğinden üretir. record değişmezdir; alanları kurulduktan sonra değiştirilemez. Jackson 2.12'den beri record'ları doğrudan okur. Okunup gösterilen API yanıtları için uygundur; nesneyi sonradan değiştirecekseniz sınıf seçin.

Java'da POJO ile record arasındaki fark nedir?

POJO her alan için ayrı getter ve setter yazılan klasik sınıftır: uzundur ama her Java sürümünde çalışır ve nesne okunduktan sonra değiştirilebilir. record aynı veriyi tek satırda tanımlar, okuyucuları, equals, hashCode ve toString'i derleyici üretir; Java 16 ve sonrasını ister ve değişmezdir. Jackson ikisini de okur (record için 2.12 ve sonrası). API yanıtını okuyup gösteren kodda record daha az satırla aynı işi görür; nesneyi düzenleyip geri gönderecekseniz ya da eski bir Java sürümündeyseniz POJO seçin.

Tip nasıl çıkarılır: birleştirme, sarmal tip, adlandırma

Araç tek bir örnekten tahmin yürütür, bu yüzden örneğiniz ne kadar çok varyasyon içerirse sınıf o kadar doğru olur. Dizideki kayıtlar tek tipe birleştirilir: ilk kalemde indirim var, ikincide yoksa indirim alanı yine sınıfta olur ama double değil Double yazılır, çünkü eksik alan Jackson'da null olarak gelir ve ilkel double null taşıyamaz. JSON'da null görülen alan da sarmal tip olur; yalnız null görülen alanın türü bilinemediği için Object yazılır.

Bir alanda farklı türler görülürse (bir kayıtta sayı, diğerinde metin) ortak tip Object'tir; boş dizi List<Object> olur. "class", "default" gibi Java'nın ayrılmış kelimeleri alan adı olamaz, sonlarına alt çizgi eklenir ve asıl ad @JsonProperty ile korunur. Anahtardan doğan sınıf adı String, List gibi Java tipleriyle çakışırsa sonuna 2 eklenir.

  • [{"a":1},{"b":2}] → Integer a; Integer b; (ikisi de her kayıtta yok)
  • {"not": null} → Object not (tür bilinmiyor)
  • {"tutar": 1250.0} → double (JSON'daki .0 okunur)
  • {"musteri_adi": "x"} → @JsonProperty("musteri_adi") String musteriAdi

Sınıf mı record mu; dürüst sınırlar

Sınıf biçimi her Java sürümünde ve Jackson, Gson, Spring'in varsayılan ayarlarıyla çalışır: private alanlar ve her alan için getter/setter yazılır; mantıksal alanın okuyucusu isX adını alır. record biçimi Java 16'dan itibaren vardır; alanları kurucu parametresi olarak yazar, değişmezdir ve Jackson 2.12 ve sonrası tarafından doğrudan okunur. Ekip eski bir Java sürümündeyse ya da nesneyi okuduktan sonra değiştirecekseniz sınıf seçin.

Dürüst sınırlar: tarih metinleri (2026-09-27) LocalDate'e, sabit değer kümeleri enum'a çevrilmez, String kalır. JSON'daki alan adları çok farklıysa (boşluklu, emojili) Java adı uyarlanır ama @JsonProperty asıl adı taşır. Jackson kullanmıyorsanız import satırını ve etiketleri silin ya da kendi kütüphanenizin karşılığıyla (Gson'da @SerializedName) değiştirin.

Sık sorulanlar

JSON'dan Java sınıfı nasıl oluşturulur?

Örnek JSON'u bu sayfanın sol paneline yapıştırın ve kök sınıf adını yazın. Sağ panelde iç içe nesneleri static iç sınıf olan, getter/setter'ları hazır bir Java sınıfı oluşur. Kodu kopyalayıp projenizde kök sınıfın adıyla (ör. Siparis.java) bir dosyaya kaydedin.

Bazı alanlar neden int değil de Integer?

O alan dizideki bazı kayıtlarda yok ya da JSON'da null görüldü. Jackson eksik ya da null alanı null olarak atar; ilkel int null taşıyamadığı için alan Integer yazılır. Her alanın her kayıtta olacağından eminseniz "Eksik alanlar" seçeneğini Zorunlu yapın; o zaman int kullanılır.

@JsonProperty etiketi neden eklendi?

JSON'daki anahtar Java adlandırma kuralına uymuyorsa (musteri_adi, first-name) alan adı camelCase'e çevrilir: musteriAdi. Jackson'ın JSON'u okurken bu alanı doğru anahtarla eşleştirebilmesi için asıl ad @JsonProperty("musteri_adi") ile yazılır. Anahtar zaten camelCase ise etiket eklenmez.

Yapıştırdığım JSON bir sunucuya gidiyor mu?

Hayır. Tip çıkarımı ve Java kodunun yazılması tamamen tarayıcınızda yapılır; müşteri verisi ya da API anahtarı içeren bir örnek yanıt bile bu sayfadan çıkmaz. Sayfa açıldıktan sonra internet olmadan da çalışır.