JSON'dan Sınıf ve Struct Üretme (7 Dil)
Örnek JSON'dan Python dataclass, C# record, Go struct, Kotlin data class, Rust serde, Swift Codable ya da Dart sınıfı üretin
Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.
Bu araç işinizi gördü mü?
Teşekkürler, geri bildiriminiz alındı.
Nasıl çalışır?
Bir web servisinin yanıtını programınızda tipli nesne olarak okumak için önce o JSON'un tiplerini yazmanız gerekir; yirmi alanlı, iç içe bir yanıtı elle çevirmek hem uzun sürer hem de yazım hatasına açıktır. Örnek yanıtı sol panele yapıştırın, listeden dili seçin ve kök tip adını yazın (ör. Siparis); kod sağ panelde anında oluşur. Örnek JSON'daki "teslimat" nesnesi kendi tipi olur (Teslimat), "kalemler" dizisi ise tekil adla Kalem tiplerinden oluşan bir liste. Dizideki bütün kayıtlar tek tipe birleştirilir: ikinci kalemde indirim yoksa bu alan Python'da float | None, C#'ta double?, Go'da *float64, Rust'ta Option<f64> olur. Sayının tam mı ondalıklı mı olduğu JSON metnindeki yazımdan okunur: 1250.0 ondalıklı kalır. "musteri_adi" gibi bir anahtar dilin kuralına göre yeniden adlandırılır (Go'da MusteriAdi, Kotlin'de musteriAdi) ve asıl ad bir etiketle korunur ki okuma kütüphanesi eşleştirebilsin. Kodun ilk satırlarındaki yorum, JSON'u o dilde tek satırla nasıl okuyacağınızı gösterir.
Bu araç json to python, json to c#, json to go struct, json to kotlin data class, json to rust, json to swift, json to dart aramalarıyla da biliniyor.
Veri sınıfı (data class, record, struct) nedir?
Veri sınıfı, davranıştan çok veri taşımak için yazılan tiptir: alanları ve türleri bellidir, gerisini derleyici ya da kütüphane tamamlar. Python'da @dataclass, C#'ta record, Kotlin'de data class, Go, Rust ve Swift'te struct aynı işi görür. Bir JSON yanıtını bu tiplere çevirmek, alan adlarının yazım hatalarını ve tür karışıklıklarını çalışma anında değil, kod yazılırken yakalamanızı sağlar.
Serileştirme (serialization) nedir?
Serileştirme, programdaki bir nesneyi JSON gibi taşınabilir bir metne çevirmek; tersine çevirme (deserialization) ise o metinden yeniden nesne kurmaktır. Her dilin bu işi yapan bir kütüphanesi vardır: System.Text.Json, encoding/json, serde, Codable, kotlinx.serialization. Bu kütüphaneler alan adlarını JSON anahtarlarıyla eşleştirir; adlar farklıysa bu sayfanın eklediği etiketler eşleşmeyi sağlar.
JSON Schema ile dil tipleri arasındaki fark nedir?
Dil tipleri (dataclass, struct, record) JSON'u tek bir programın içinde okumak içindir: derleyici ya da çalışma zamanı alan adını ve türünü denetler, ama bu denetim yalnız o dilde geçerlidir. JSON Schema ise dilden bağımsız bir sözleşmedir; bir JSON'un geçerli olup olmadığını her dilde aynı kurallarla doğrular ve API belgelerinde kullanılır. Kendi kodunuzda veriyi okuyacaksanız bu sayfadaki tipler, farklı ekiplerin ve dillerin uyacağı bir kural yazacaksanız JSON Schema daha uygundur.
Her dilde ne üretilir, hangi kütüphane gerekir
Her dil kendi topluluğunun alışılmış yolunu izler, böylece kod projenize ek düzenleme olmadan girer. Python'da standart kütüphanedeki @dataclass kullanılır; iç içe nesneleri de kuran bir from_dict sınıf metodu eklenir, çünkü dataclass sözlükten kendiliğinden nesne kurmaz. C# çıktısı .NET'in yerleşik System.Text.Json'u için konumsal record'dur. Go'da struct alanları büyük harfle başlar (dışa açık olmaları için) ve json:"..." etiketi asıl anahtarı taşır; id, url, api gibi kısaltmalar Go geleneğiyle ID, URL, API yazılır.
Kotlin çıktısı kotlinx.serialization eklentisini, Rust çıktısı serde ve serde_json paketlerini (Cargo.toml'da serde'nin derive özelliğiyle) ister. Swift'te Codable yeterlidir, ek paket gerekmez. Dart çıktısı Flutter'da ek paket istemeyen elle yazılmış fromJson/toJson çiftidir; json_serializable gibi kod üreticiye gerek bırakmaz.
- Python 3.7+: @dataclass + from_dict, boş olabilir alan float | None = None
- C# 9+: public record Siparis(...) + [property: JsonPropertyName("siparisNo")]
- Go 1.18+: *float64 + json:"indirim,omitempty"
- Kotlin: @Serializable data class, @SerialName("musteri_adi")
- Rust: #[derive(Serialize, Deserialize)], Option<f64>, #[serde(rename)]
- Swift 5: struct Siparis: Codable + enum CodingKeys
- Dart 3 / Flutter: final alanlar, factory fromJson, toJson
Tuzaklar: tek örnekten tahmin, null ve karışık tipler
Araç tipi yalnız verdiğiniz örnekten çıkarır; örnekte hiç null görünmeyen bir alan canlı veride null gelirse kodunuz o anda hata verir. Bu yüzden mümkünse birkaç kaydı olan bir dizi yapıştırın: kayıtlar birleştirildiğinde bazısında eksik ya da null olan alanlar kendiliğinden boş olabilir tipe geçer. Yalnız null görülen alanın türü bilinemez; her JSON değerini taşıyabilen tipe düşer (Python'da Any, C#'ta JsonElement, Rust'ta serde_json::Value, Swift'te çıktıya eklenen JSONValue).
Bir alan bir kayıtta sayı, diğerinde metinse aynı genel tip kullanılır; boş dizinin öğe tipi de bilinemediği için genel kalır. Tarih metinleri (2026-09-27) ve sınırlı değer kümeleri tarih tipine ya da enum'a çevrilmez, metin kalır; bunları elle daraltmanız gerekir. class, type, self gibi dilde ayrılmış kelimeler alan adı olamaz: Python'da class_, Kotlin ve Swift'te ters tırnaklı `class`, Rust'ta r#type yazılır; asıl JSON adı etiketle korunur.
Sık sorulanlar
JSON'dan Python sınıfı nasıl oluşturulur?
Örnek JSON'u bu sayfanın sol paneline yapıştırın, dil olarak Python'u seçin ve kök tip adını yazın. Sağ panelde her iç içe nesne için bir @dataclass ve JSON sözlüğünden nesne kuran from_dict metodu oluşur. json.loads ile okuduğunuz sözlüğü Siparis.from_dict(...) ile nesneye çevirebilirsiniz.
Go struct'ta alanlar neden büyük harfle başlıyor?
Go'da yalnız büyük harfle başlayan alanlar paket dışına açıktır ve encoding/json yalnız bu alanlara değer yazabilir. Bu yüzden musteri_adi anahtarı MusteriAdi alanı olur; json:"musteri_adi" etiketi okuma sırasında doğru anahtarla eşleşmeyi sağlar. id ve url gibi kısaltmalar Go geleneğine göre ID, URL yazılır.
Bazı alanlar neden Optional, ? ya da Option olarak yazıldı?
O alan dizideki bazı kayıtlarda yok ya da JSON'da null görüldü. Dil bu durumda değerin boş gelebileceğini bilmezse okuma sırasında hata verir. Her alanın her kayıtta bulunacağından eminseniz "Bazı kayıtlarda olmayan alanlar" seçeneğini Zorunlu yapın; yalnız null görülen alanlar boş olabilir kalır.
Yapıştırdığım JSON bir sunucuya gidiyor mu?
Hayır. Tip çıkarımı ve kodun yazılması tamamen tarayıcınızda yapılır; müşteri kaydı ya da erişim anahtarı içeren bir örnek yanıt bile bu sayfadan çıkmaz. Sayfa yüklendikten sonra internet bağlantısı olmadan da çalışır.