JSON'dan Java'ya

JSON'dan Java POJO sınıfları oluşturun

Örnek dene
Kök sınıf adı:

JSON Girişi

Java Çıkışı

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir
Java sınıfları burada görünecek…

JSON'dan Java Sınıfına Dönüşüm Nedir?

JSON'dan Java sınıfına dönüşüm, ham bir JSON nesnesini alır ve özel alanlar, getter'lar ile setter'lar içeren Plain Old Java Object (POJO) tanımlarına dönüştürür. Java'nın yerleşik bir JSON tür sistemi yoktur; bu nedenle her JSON API yanıtı, yapılandırma dosyası veya mesaj yükü için karşılık gelen bir sınıf oluşturmanız gerekir. Jackson ve Gson gibi kütüphaneler JSON anahtarlarını Java alanlarına yansıma (reflection) aracılığıyla eşler; ancak sınıf tanımlarının önceden mevcut olmasını gerektirir.

JSON seri dışı bırakma için kullanılan standart bir Java POJO, her JSON anahtarı için bir özel alan, argümansız bir kurucu ve her alan için bir getter/setter çifti bildirir. İç içe JSON nesneleri ayrı sınıflara dönüşür. Diziler, java.util.List içe aktarımıyla birlikte List<T> alanlarına dönüşür. Temel JSON türleri, Java temel türlerine (int, double, boolean) ya da jenerik içinde kullanıldıklarında sarmalayıcı türlerine (Integer, Double, Boolean) eşlenir. Null değerler genellikle Object'e veya null olabilir bir başvuru türüne eşlenir.

Bu sınıf tanımlarını elle yazmak tekrarlayıcı bir iştir. Her JSON anahtarını okur, değerden Java türünü belirler, adlandırma kurallarını camelCase JSON'dan camelCase Java alanlarına dönüştürür, iç içe nesneler için PascalCase sınıf adları oluşturur ve getter/setter şablonunu eklersiniz. 15 alana ve 3 iç içe nesneye sahip bir JSON nesnesi için 4 sınıf, 30'dan fazla metot yazıp hepsini tutarlı tutmanız gerekir. Bir dönüştürücü bunu milisaniyeler içinde yapar.

Neden JSON'dan Java Dönüştürücü Kullanmalısınız?

JSON'dan Java POJO'larını elle oluşturmak, her alanı incelemeyi, örnek değerlerden türleri çıkarsamamayı, getter/setter çiftleri yazmayı ve bu işlemi her iç içe nesne için tekrarlamayı gerektirir. API sözleşmesi değiştiğinde her şeyi elle güncellersiniz. Bir dönüştürücü bu mekanik işi ortadan kaldırır.

Anında POJO üretimi
JSON'unuzu yapıştırın ve bir saniyenin altında eksiksiz Java sınıf tanımları alın. İç içe nesneler, listeler ve temel türler otomatik olarak algılanır ve eşlenir.
🔒
Gizlilik öncelikli işlem
Dönüşüm tamamen tarayıcınızda JavaScript kullanılarak çalışır. JSON veriniz asla makinenizden çıkmaz. API anahtarları, token'lar ve üretim verileri gizli kalır.
📝
Doğru tür çıkarsaması
Üretilen her alan, JSON değerinden çıkarsanan uygun Java türünü kullanır: String, int, double, boolean, List<T> veya null'lar için Object. Sarmalayıcı türler, jenerik içinde kullanılır.
📦
Kurulum veya kayıt gerekmez
Sayfayı açın ve JSON'unuzu yapıştırın. JDK, Maven bağımlılığı veya hesap gerekmez. Tarayıcısı olan her cihazda çalışır.

JSON'dan Java'ya Kullanım Senaryoları

Spring Boot API Geliştirme
API JSON örneklerinden istek ve yanıt DTO'ları oluşturun. Beklenen yük yapısını yapıştırın ve Spring controller'larında @RequestBody ile @ResponseBody ek açıklamaları için hazır Java sınıfları alın.
Android Uygulama Geliştirme
Retrofit veya Volley ağ yanıtları için model sınıfları oluşturun. Backend API'nizin döndürdüğü JSON'ı yapıştırın ve Gson veya Moshi dönüştürücüleriyle uyumlu POJO'lar alın.
Mikro Servis Entegrasyonu
Kafka, RabbitMQ veya gRPC JSON yükleri için türlendirilmiş mesaj sınıfları tanımlayın. Örnek bir mesajı yapıştırın ve servisler arasındaki beklenen sözleşmeyi belgeleyen POJO'lar oluşturun.
Eski Sistem Taşıma
REST uç noktalarını türlendirilmiş bir istemciye sararken JSON API yanıtlarını Java sınıflarına dönüştürün. Gevşek türlendirilmiş Map<String, Object> kalıplarından düzgün domain modellerine geçerken kullanışlıdır.
QA ve Test Otomasyonu
API yanıt örneklerinden türlendirilmiş test sabit verileri oluşturun. QA mühendisleri gerçek JSON yanıtlarını yapıştırıp AssertJ doğrulamalarıyla JUnit veya TestNG test paketlerinde kullanılmak üzere POJO tanımları üretebilir.
Java OOP Kalıplarını Öğrenmek
Öğrenciler herhangi bir JSON yapısını yapıştırıp Java'nın bunu sınıflar, alanlar, getter'lar, setter'lar ve iç içe türlerle nasıl temsil ettiğini görebilir. Çıktı konuyu soyuttan somuta taşır.

JSON'dan Java'ya Tür Eşleme

Her JSON değeri belirli bir Java türüne eşlenir. Aşağıdaki tablo, dönüştürücünün her JSON türünü Java karşılığına nasıl çevirdiğini göstermektedir. Alternatif sütunu, List<T> gibi jenerik bağlamlarda kullanılan sarmalayıcı türlerini veya Record'lar gibi daha yeni Java özelliklerini gösterir.

JSON TürüÖrnekJava TürüAlternatif
string"hello"StringString
number (integer)42intint / Integer
number (float)3.14doubledouble / Double
booleantruebooleanboolean / Boolean
nullnullObjectObject (or @Nullable String)
object{"k": "v"}NestedClassRecord (Java 16+)
array of strings["a", "b"]List<String>List<String>
array of objects[{"id": 1}]List<Item>List<Item>
mixed array[1, "a"]List<Object>List<Object>

Java JSON Ek Açıklama Başvurusu

Jackson veya Gson ile JSON seri dışı bırakırken ek açıklamalar; JSON anahtarlarının Java alanlarına nasıl eşlendiğini, bilinmeyen alanların nasıl işlendiğini ve null değerlerin nasıl ele alındığını kontrol eder. Bu başvuru, üretilen POJO'larla çalışırken en sık karşılaşacağınız ek açıklamaları kapsar.

Ek AçıklamaAmaçKütüphane
@JsonProperty("name")Maps a JSON key to a Java field with a different nameJackson
@SerializedName("name")Same as @JsonProperty, but for the Gson libraryGson
@JsonIgnorePropertiesIgnores unknown JSON keys during deserialization instead of failingJackson
@NullableMarks a field as accepting null values from JSON inputJSR 305 / JetBrains
@NotNullEnforces that a field must not be null, throws on violationBean Validation
@JsonFormat(pattern=...)Defines a date/time format for serialization and deserializationJackson

POJO ile Record ve Lombok Karşılaştırması

Java'da JSON verilerini tutmak için türlendirilmiş yapılar tanımlamanın üç yaygın yolu vardır. Her biri farklı bir proje tarzına ve Java sürümüne uygundur. POJO'lar en geniş uyumluluğa sahip geleneksel kalıptır. Record'lar değişmez veriler için şablon kodunu azaltır. Lombok, ek açıklamalar aracılığıyla derleme zamanında getter'lar, setter'lar ve kurucular üretir.

POJO
Geleneksel Java kalıbı. Java 8+ ile çalışır. Özel alanlar ve getter/setter metotları tanımlarsınız. Değişebilirlik ve özel mantık üzerinde tam kontrol. Her JSON kütüphanesiyle uyumludur (Jackson, Gson, Moshi). Spring Boot, Android ve kurumsal kod tabanları için standart tercih.
Record (Java 16+)
Java 16'dan bu yana yerleşik (14'te önizleme). Kompakt sözdizimi: record User(int id, String name) kurucu, erişimciler, equals, hashCode ve toString üretir. Örnekler değişmezdir. Jackson, 2.12 sürümünden itibaren Record'ları destekler. Setter'a ihtiyaç duyulmayan değer nesneleri ve DTO'lar için en uygun seçenektir.
Lombok @Data
Üçüncü taraf derleme zamanı ek açıklama işleyicisi. @Data, getter'lar, setter'lar, equals, hashCode ve toString üretir. @Builder, bir builder kalıbı ekler. Değişebilirliği korurken şablon kodu miktarını Record düzeyine indirir. Derleme aracınıza (Maven/Gradle) Lombok bağımlılığı ve IDE eklentisi eklemenizi gerektirir.

Kod Örnekleri

Bu örnekler, üretilen Java POJO'larının Jackson ile seri dışı bırakma için nasıl kullanılacağını, JavaScript ve Python'dan programatik olarak Java sınıflarının nasıl üretileceğini ve toplu üretim için jsonschema2pojo CLI aracının nasıl kullanılacağını göstermektedir.

Java (Jackson deserialization)
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;
    private String email;
    private boolean active;
    private double score;
    private Address address;
    private List<String> tags;

    // getters and setters omitted for brevity

    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Alice\",\"email\":\"alice@example.com\",\"active\":true,\"score\":98.5,\"address\":{\"street\":\"123 Main St\",\"city\":\"Springfield\",\"zip\":\"12345\"},\"tags\":[\"admin\",\"user\"]}";
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);
        System.out.println(user.getName()); // -> Alice
    }
}

class Address {
    private String street;
    private String city;
    private String zip;
    // getters and setters
}
JavaScript (generate Java POJO from JSON)
// Minimal JSON-to-Java-POJO generator in JS
function jsonToJava(obj, name = "Root") {
  const classes = [];
  function infer(val, fieldName) {
    if (val === null) return "Object";
    if (typeof val === "string") return "String";
    if (typeof val === "number") return Number.isInteger(val) ? "int" : "double";
    if (typeof val === "boolean") return "boolean";
    if (Array.isArray(val)) {
      const first = val.find(v => v !== null);
      if (!first) return "List<Object>";
      const elem = infer(first, fieldName);
      const boxed = elem === "int" ? "Integer" : elem === "double" ? "Double" : elem === "boolean" ? "Boolean" : elem;
      return `List<${boxed}>`;
    }
    if (typeof val === "object") {
      const cls = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
      build(val, cls);
      return cls;
    }
    return "Object";
  }
  function build(obj, cls) {
    const fields = Object.entries(obj).map(([k, v]) => {
      const type = infer(v, k);
      return `    private ${type} ${k};`;
    });
    classes.push(`public class ${cls} {\n${fields.join("\n")}\n}`);
  }
  build(obj, name);
  return classes.join("\n\n");
}

console.log(jsonToJava({ id: 1, name: "Alice", scores: [98, 85] }, "User"));
// public class User {
//     private int id;
//     private String name;
//     private List<Integer> scores;
// }
Python (generate Java classes from JSON)
import json

def json_to_java(obj: dict, class_name: str = "Root") -> str:
    classes = []

    def infer(val, name):
        if val is None:
            return "Object"
        if isinstance(val, bool):
            return "boolean"
        if isinstance(val, int):
            return "int"
        if isinstance(val, float):
            return "double"
        if isinstance(val, str):
            return "String"
        if isinstance(val, list):
            if not val:
                return "List<Object>"
            elem = infer(val[0], name)
            boxed = {"int": "Integer", "double": "Double", "boolean": "Boolean"}.get(elem, elem)
            return f"List<{boxed}>"
        if isinstance(val, dict):
            cls = name[0].upper() + name[1:]
            build(val, cls)
            return cls
        return "Object"

    def build(obj, cls):
        fields = [f"    private {infer(v, k)} {k};" for k, v in obj.items()]
        classes.append(f"public class {cls} {{\n" + "\n".join(fields) + "\n}")

    build(obj, class_name)
    return "\n\n".join(classes)

data = json.loads('{"id": 1, "name": "Alice", "tags": ["admin"]}')
print(json_to_java(data, "User"))
# public class User {
#     private int id;
#     private String name;
#     private List<String> tags;
# }
CLI (jsonschema2pojo)
# Install jsonschema2pojo (requires Java 8+)
# Download from https://github.com/joelittlejohn/jsonschema2pojo

# Generate POJOs from a JSON file
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style jackson2

# Generate with Gson annotations instead
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style gson

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice", "tags": ["admin"]}' | \
  jsonschema2pojo --source-type json --annotation-style jackson2 \
  --target src/main/java --target-package com.example.model

Sıkça Sorulan Sorular

POJO ile Java Bean arasındaki fark nedir?
POJO (Plain Old Java Object), çerçeve bağımlılığı olmayan basit bir Java sınıfıdır. Java Bean ise belirli kurallara uyan bir POJO'dur: argümansız kurucu, özel alanlar ve public getter/setter'lar ile Serializable arayüzünün uygulanması. JSON eşleme için çoğu kütüphane Bean kurallarını (getter/setter) gerektirir; ancak Serializable zorunlu değildir. Bu araç tarafından üretilen sınıflar, Bean getter/setter kalıbını izler.
Üretilen POJO'larla hangi JSON kütüphanesini kullanmalıyım?
Jackson (com.fasterxml.jackson), en yaygın kullanılan Java JSON kütüphanesidir ve Spring Boot'ta varsayılan olarak gelir. Gson (com.google.gson), Android projelerinde popülerdir ve daha basit bir API sunar. Moshi, Square tarafından geliştirilen ve Kotlin birlikte çalışabilirliği için tasarlanmış daha yeni bir alternatiftir. Her üçü de getter ve setter'lara sahip standart POJO'larla çalışır.
Dönüştürücü iç içe JSON nesnelerini nasıl işler?
Her iç içe nesne ayrı bir Java sınıfına dönüşür. "street" ve "city" anahtarları içeren bir nesneyi barındıran "address" adlı bir JSON alanı varsa, dönüştürücü bu alanlar ve türlerle bir Address sınıfı oluşturur ve üst alanı Address olarak türlendirir. Derin iç içe yapılar, birden fazla sınıf tanımı üretir.
Bir JSON alanı null olduğunda ne olur?
Null alanlar Object olarak türlendirilir; çünkü dönüştürücü yalnızca null değerden amaçlanan türü çıkarsayamaz. Pratikte, API sözleşmesini öğrendikten sonra Object'i beklenen türle (String, Integer vb.) değiştirirsiniz. Jackson kullanılırken null değerler, varsayılan olarak başvuru türü alanlara hatasız biçimde atanır.
JSON için POJO yerine Java Record kullanmalı mıyım?
Record'lar, setter'a ihtiyaç duymadığınız değişmez veri aktarım nesneleri için iyi çalışır. Jackson, 2.12 sürümünden itibaren Record'ları destekler; Gson da sonraki sürümlerde destek ekledi. Projeniz Java 16+ üzerinde çalışıyorsa ve API yanıtlarını salt okunur veri olarak değerlendiriyorsanız Record'lar şablon kodu miktarını azaltır. Değişebilirliğe ihtiyacınız varsa veya Java 8/11 hedefliyorsanız POJO'ları tercih edin.
Geçerli Java tanımlayıcısı olmayan JSON anahtarlarını nasıl işlerim?
"first-name" veya "2nd_place" gibi JSON anahtarları geçerli Java alan adları değildir. JSON anahtarını firstName gibi geçerli bir Java alan adıyla eşleştirmek için Jackson'da @JsonProperty("first-name") veya Gson'da @SerializedName("first-name") kullanın. Dönüştürücü, anahtar adlarını otomatik olarak camelCase Java alanlarına dönüştürür.
JSON örneği yerine JSON Schema'dan Java sınıfları üretebilir miyim?
Bu araç, JSON veri örneklerinden sınıflar üretir. JSON Schema girdisi için jsonschema2pojo projesini (CLI aracı, Maven eklentisi ve Gradle eklentisi olarak kullanılabilir) kullanın. Bir JSON Schema dosyasını okur ve şema açıklamalarından doğrulama kısıtlamaları, varsayılan değerler ve belgeleme içeren ek açıklamalı Java sınıfları üretir.