Swift’ten JSON’a Dönüştürücü
Swift struct’larını ya da Codable tiplerini yapıştırın. Geriye temiz JSON alın.
Bu araç ne yapıyor
Hiç bir Swift struct’ı tanımlayıp Codable yaptıktan sonra, sırf JSON’ı görmek için playground ya da simülatör açmak zorunda kaldığınız oldu mu? Bu araç tam olarak bu işi yapıyor. Swift’i buraya yapıştırın, JSONEncoder’a, Xcode’a veya Swift Package Manager’a dokunmadan geçerli JSON alın. Tek bir struct örneği, birkaç tip içeren bir dosyanın tamamı ya da iç içe diziler ve optional içeren bir şey — sonuç aynı: her property’nin korunduğu, tertemiz bir JSON dokümanı.
Dönüştürücü, Swift değerlerinin JSONEncoder üzerinden gerçekte nasıl serialize edildiğini takip eder. String, Int, Double, Bool doğrudan JSON karşılıklarına eşlenir. [Item] dizileri JSON dizisine; [String: V] sözlükleri JSON nesnesine dönüşür. nil olan Optional<T> JSON’da null olur (ya da encoder stratejisine göre atlanır). UUID standart hex stringe, Date ISO-8601 stringe, URL stringe dönüşür. Raw value’lu enum’lar raw value’yu basar — Foundation.JSONEncoder ile aldığınız davranışın aynısı.
Özel CodingKeys tanımlarınız korunur — bir property’i JSON için yeniden adlandırdıysanız (case shippingAddress = "shipping_address"), çıktı bu yeni ismi kullanır. İç içe Codable tipleri inline olarak açılır. Birden fazla struct’ı birden yapıştırın; her biri çıktıda bir üst seviye giriş olur. Swift’in JSON’ı nasıl modellediğini daha derin incelemek isterseniz, apple/swift’te kaynak kod var ve Hacking with Swift’te Codable protokolüne dair okunaklı anlatımlar mevcut.
Nasıl kullanılır
Üç adım. Tek bir struct örneği yapıştırsanız da komple bir model dosyasını yapıştırsanız da aynı şekilde çalışır.
Swift’inizi yapıştırın (veya örneği yükleyin)
Soldaki editöre Swift’i olduğu gibi atın. Bir struct, bir class, bir associated value’lu enum, birden fazla tip ya da iç içe dizi ve sözlükler — hepsi olur. Önce gerçekçi bir örnek görmek için Örnek yükle’ye tıklayın.
import Foundation’ı ya da @available attribute’larını silmenize gerek yok. Swift söz dizimini olduğu gibi bırakın — parser halleder.
Dönüştür’e basın
Yeşil Dönüştür düğmesine tıklayın. Araç Swift’i okur, her property’yi ve iç içe tipi korur ve JSON’ı tek seferde çıkarır. Çalışırken kısa bir yüklenme göstergesi görünür.
JSON’ı kopyalayın
Sağdaki panel girintili JSON ile dolar. URLSession testinize, bir MockURLProtocol fixture’ına, OpenAPI örneklerinize ya da REST istemcinize kopyalayın. Döngü bu kadar.
Gerçekten işe yaradığı durumlar
iOS API fixture’ları
Bir <code>URLSession</code> çağrısı için request struct’ınız var ve Postman ya da bir test için JSON payload’a ihtiyacınız var. Struct’ı yapıştırın, JSON’ı alın, devam edin.
Mock sunucu yanıtları
Response <code>Codable</code> tiplerinizi, mock sunucuya, <code>MockURLProtocol</code>’a ya da kayıtlı yanıt dosyasına atabileceğiniz JSON’a dönüştürün — tek bir <code>JSONEncoder</code> çağrısı bile gerekmez.
Vapor / SwiftNIO backend testleri
20 <code>Content</code> tipi olan bir Vapor servisi. Entegrasyon testleri için tek bir encode satırı yazmadan JSON seed dosyaları üretin.
Dokümantasyon ve OpenAPI örnekleri
OpenAPI spec’iniz ya da API referansınız için JSON örneklerini doğrudan gerçek modellerinizden üretin; böylece dokümantasyon senkron kalır.
Sık sorulan sorular
Tipin Codable’a uyması şart mı?
Aracın çalışması için tipin kodunuzda gerçekten uyuyor olması gerekmiyor — dönüştürücü şekli okuyup JSON’ı doğrudan üretiyor. Kendi uygulamanızda aynı sonucu runtime’da JSONEncoder üzerinden almak için Codable (veya en azından Encodable) kullanıyorsunuz.
Özel CodingKeys’i dikkate alıyor mu?
Evet. Tipiniz enum CodingKeys: String, CodingKey’i özel raw value’larla tanımlıyorsa (case shippingAddress = "shipping_address"), çıktı bu yeniden adlandırılmış anahtarları kullanır.
Optional, Date ve UUID nasıl ele alınıyor?
nil olan Optional<T> JSON’da null olur. Date varsayılan olarak ISO-8601 stringe dönüşür (tıpkı JSONEncoder.DateEncodingStrategy.iso8601’deki gibi). UUID standart hex stringe, URL stringe dönüşür.
Peki associated value’lu enum’lar?
Raw value’lu enum’lar doğrudan raw value’yu basar. Associated value’lu enum’lar tag’lı nesne olarak çıkar — Swift’in kendisi associated value’lu bir casei encode ettiğinde ortaya çıkardığı şeklin aynısı.
Kodum saklanıyor mu?
Kodunuz dönüştürme için backende gönderiliyor ve kalıcı olarak tutulmuyor — payload’u loglamıyoruz. Yapıştırmadan önce hassas kodu bir kez gözden geçirin.
SwiftUI modelleri ve property wrapper’ları ile çalışıyor mu?
Evet — @Published gibi property wrapper’lar iç değerlerine açılır. @Published property’leri olan ObservableObject sınıfları sorunsuz serialize olur. SwiftUI’ye özgü view tipleri serialize edilebilir veri değildir, ama view’larınızın arkasındaki her model adil oyundur.
İşinize yarayabilecek diğer araçlar
Swift’ten JSON’a, yapbozun yalnızca bir parçası. Bunlar onunla iyi gider: