Objective-C’yi sola yapıştırın ve "Dönüştür" butonuna tıklayın — biz JSON’a çeviririzObjective-C kodunu yapıştırın

Bu araç ne yapar

Elinizde bir Objective-C NSDictionary literali, model’lerden oluşan bir NSArray, ya da yığınla @property tanımıyla dolu koca bir sınıf varsa ve sadece JSON karşılığını görmek istiyorsanız — bu araç bunu yapar. Çıktıyı görmek için NSJSONSerialization çağıran tek kullanımlık bir program yazmaya gerek yok.

Çıktı, eşdeğer bellek içi obje grafiği üzerinde [NSJSONSerialization dataWithJSONObject:options:error:]’in vereceği şeyle birebirdir. NSDictionary JSON objesine, NSArray JSON dizisine, NSString string olarak kalır, NSNumber altta yatan türüne göre number ya da boolean olur (@YES/@NO ile @42 farkı), NSNull / [NSNull null] null olur. NSDate ISO-8601 string olarak üretilir — iOS uygulamalarının ekseriyetle üzerinde uzlaştığı kural.

Koca bir sınıf yapıştırırsanız (@interface Order : NSObject ... @end artı bir @implementation veya property atamaları olan bir [[Order alloc] init] literali), dönüştürücü her @property’yi okuyup bu anahtarlarla JSON objesini kurar. İç içe sınıflar — Order’da Address property’si — iç içe JSON objelerine açılır. Birden fazla sınıfı yan yana yapıştırdığınızda birden fazla üst düzey kayıt olarak çıkarlar.

Nasıl kullanılır

Üç adım. Tek bir dictionary literali için de, sınıflarla dolu bir dosya için de aynı şekilde çalışır.

1

Objective-C’yi yapıştırın (ya da örneği deneyin)

Kodunuzu soldaki editöre bırakın. Bir NSDictionary literali, bir NSArray, bir @property’li sınıf veya atamaları olan bir sınıf instance’ı — hepsi olur.

@ öneklerini, pointer yıldızlarını ve köşeli parantez söz dizimini olduğu gibi bırakın. Parser @{...}, @[...] ve @"..."’yu anlıyor.

2

Dönüştür’e basın

Yeşil Dönüştür butonuna tıklayın. Araç her dictionary, array, property ve değeri okuyup JSON’u tek geçişte inşa eder.

3

JSON’u kopyalayın

Sağdaki panel size girintili JSON verir; test fixture’ı, API mock’ı ya da dokümantasyon için hazır. Kopyalayıp yolunuza devam edin.

Gerçekten işe yaradığı anlar

iOS API response fixture’ları

Bir unit test’te <code>dataWithJSONObject:</code>’a geçireceğiniz dictionary’yi yapıştırın ve çıktıyı .json fixture olarak kaydedin. Test deterministik kalır.

Legacy Obj-C model’leri belgelemek

Eski bir iOS code base’inde OpenAPI spec’inde belgelemeniz gereken Obj-C sınıfları var. Her model’i JSON’a çevirerek şema şeklini tahmin etmeden çıkarabilirsiniz.

Swift’e port etmek

Swiftification sürecinde her Obj-C sınıfının ima ettiği JSON şekline ihtiyaç duyuyorsunuz. Codable struct’ı yazmadan önce o referansı üretmenin hızlı yolu.

Backend’e teslim

POST için hazır bir NSDictionary’niz var. İstek gitmeden önce JSON şeklinin API kontratıyla uyuştuğunu çifte kontrol etmek için yapıştırın.

Sık sorulan sorular

NSJSONSerialization çıktısıyla birebir mi?

Evet — zaten hedef bu. NSDictionary/NSArray/NSString/NSNumber/NSNull standart şekilde eşleşir. NSDate ISO-8601 string olarak üretilir (NSJSONSerialization’ın kendisi NSDate’i ele almaz — araç yaygın kullanılan kuralı benimsiyor).

@property tanımlı bir sınıfı yapıştırabilir miyim?

Evet. Her @property JSON objesinde bir anahtar olur ve tip değerin nasıl üretileceğini belirler (örn. NSString * → string, NSNumber * → number). Örnekte property atamaları da varsa o değerler JSON’a girer; yoksa placeholder değerler kullanılır.

BOOL ile NSNumber nasıl ayrılıyor?

@YES / @NO ve [NSNumber numberWithBool:] JSON’da true/false üretir. Integer ve float NSNumber literalleri (@42, @3.14) JSON number üretir — NSJSONSerialization’ın kodlanmış türden ayırt edebildiği durumlarda uyguladığı kuralla aynı.

İç içe sınıflar ve obje dizileri nasıl?

İç içe NSDictionary ve NSArray eksiksiz açılır. Başka bir sınıfı property olarak tutan bir sınıf iç içe JSON objesi olarak çıkar. Model instance’larından oluşan bir NSArray her instance’a bir obje düşecek şekilde JSON objesi dizisine dönüşür.

Kodum saklanıyor mu?

Kodunuz dönüştürme için backend’e gönderilir ve saklanmaz — payload’u loglamayız. Yine de gerçek anahtar veya tokenları yapıştırmadan önce örnekten çıkarın.

NSDate, NSURL ve diğer Foundation tiplerini destekliyor mu?

NSDate bir ISO-8601 string’e dönüşür. NSURL absoluteString’ine dönüşür. NSData base64’e dönüşür. Bunlar serileştirme yaparken iOS ekiplerinin çoğunun kullandığı kurallar ve Foundation’da belgelenmiştir.

İhtiyaç duyabileceğiniz diğer araçlar

Objective-C’den JSON’a, alet çantasının geri kalanıyla iyi anlaşır: