JSON'dan Dart'a Dönüştürücü

Adım 1 / 333%

Bir JSON nesnesinden veya örnek nesne dizisinden ek bağımlılık gerektirmeyen Dart model sınıfları üretin. Dönüştürücü dizideki tüm örnekleri birleştirir, iç içe sınıflar oluşturur, özgün JSON anahtarlarını korur ve factory fromJson kurucusuyla birlikte null güvenli alan türlerini belirler. jsonEncode ile uyumlu çıktı gerekiyorsa toJson metotlarını ekleyebilirsiniz. Örnek ve üretilen kod bu tarayıcıda kalır; hiçbir zaman yüklenmez veya URL’ye eklenmez.

Nasıl çalışır

  1. 1

    Temsilî bir örnek yapıştırın

    Bir JSON nesnesi veya nesne dizisi kullanın. Birden fazla öğe eksik, nullable ve farklı türdeki alanları ortaya çıkarır.

  2. 2

    Dart seçeneklerini belirleyin

    Kök sınıfa ad verin, tüm alanların nullable olup olmayacağını seçin ve gerekiyorsa toJson metotlarını ekleyin.

  3. 3

    İnceleyin ve dışa aktarın

    Belirlenen sınıfları kontrol edin, ardından kodu kopyalayın veya yerel bir models.dart dosyası indirin.

JSON, null güvenli Dart modellerine nasıl dönüşür?

Resmî dart:convert belgeleri, jsonDecode() metodunun sayılar, dizgeler, boolean değerler, null, listeler ve dize anahtarlı map’ler gibi JSON ile uyumlu değerler ürettiğini açıklar. Bir model sınıfı doğrudan JSON olarak kodlanamaz, ancak jsonEncode() sınıfın toJson() metodunu çağırabilir. Bu dönüştürücü, json_serializable açıklama ekleri veya paket bağımlılıkları eklemeden söz konusu manuel serileştirme kalıbını üretir.

Örneğin iç içe adresi olan bir kullanıcı bulunduğunu düşünün. Üretilen User sınıfı final alanlara ve adlandırılmış parametreli bir kurucuya sahiptir. User.fromJson(Map<String, Object?> json) skaler değerlerin türünü dönüştürür ve iç içe nesne için UserAddress.fromJson() metodunu çağırır. address incelenen nesnelerin herhangi birinde yoksa veya null ise türü UserAddress? olur ve factory, nesneyi oluşturmadan önce değeri denetler. toJson etkin olduğunda iç içe modeller, jsonEncode() tarafından kabul edilen map’lere özyinelemeli olarak dönüştürülür.

JSON’da gözlemlenen değer Üretilen Dart türü
Tam sayı int
Ondalık sayı double
Tam sayı ve ondalık örnekleri num
Metin String
Boolean değer bool
İç içe nesne Üretilen model sınıfı
Tutarlı dizi List<T>
Boş veya uyumsuz iç içe dizi List<Object?>
Yalnızca null veya çelişen değerler Object?

Dönüştürücü yalnızca ilk öğeye güvenmek yerine kök dizideki her nesneyi inceler. Bir alan herhangi bir öğede eksikse veya açıkça null ise nullable olur. Gerçek API örnekten daha öngörülemez olduğunda tüm alanları nullable da yapabilirsiniz. Dart null safety kılavuzu, türlerin varsayılan olarak nullable olmadığını ve null kabul etmeleri için ? gerektiğini belirtir.

Tanımlayıcıların işlenmesi ve çıkarım sınırları

JSON anahtarlarının geçerli Dart üyeleri olması gerekmez. Noktalama işaretleri kaldırılır, sözcükler lowerCamelCase biçimine dönüştürülür, ayrılmış sözcüklere güvenli bir sonek ve çakışmalara belirli sayısal sonekler eklenir. Özgün anahtar json['original-key'] içinde ve toJson() map’inde değişmeden kalır. İç içe sınıf adları tam yollarını kullanır; böylece birbirinden bağımsız adres nesneleri yanlışlıkla tek sınıfta birleşmez.

Tek bir örnek API sözleşmesini kanıtlayamaz. JSON dizgeleri kendiliğinden tarih, UUID veya enum değildir; boş bir dizi de öğe türünü göstermez. Yinelenen üye adları güvenilir biçimde gidiş dönüş yapamaz, çünkü JSON ayrıştırıcıları çoğunlukla son değeri korur. Modelleri üretimde kullanmadan önce API belgeleri veya şemasıyla karşılaştırın. Girdi, derinlik, çıkarılan bildirim ve çıktı sınırları tarayıcıdaki işlemi denetim altında tutar.

Sık Sorulan Sorular

Hayır. Ayrıştırma, çıkarım, kod üretme, kopyalama ve indirme tarayıcıda gerçekleşir. JSON ve Dart kodu sunucularımıza gönderilmez veya URL’ye yerleştirilmez.

Evet. Flutter, Dart kullanır; dolayısıyla bağımlılık gerektirmeyen bu sınıflar bir Flutter projesinde kullanılabilir. Önce belirlenen türleri gerçek API sözleşmesiyle karşılaştırın.

Hayır. Araç, paket veya build_runner bağımlılığı olmadan manuel fromJson ve isteğe bağlı toJson metotları üretir.

Null olarak görülen veya bir örnekte bulunmayan alan nullable olur. Örnek temsilî değilse üretilen tüm alanları nullable yapabilirsiniz.

Hayır. Sonuç yalnızca gözlemlenen değerleri yansıtır. Birden fazla örnek nesne kullanın ve sonucu sağlayıcının şeması veya belgeleriyle karşılaştırın.

İlgili Araçlar

Araç diğer dillerde mevcuttur