JSON Kullanımı (Swift için..)

Öyle çokta uzun olmayan bir aradan sonra tekrardan Merhaba..

Bugün anlatacağım konuyu daha öncelerde yazma niyetindeydim. Fakat El Capitan OS X sürümüne geçme sürecim biraz sancılı oldu. Dolayısıyla makalemizde gecikmiş oldu.. Neyse. Uzatmayayım.. 🙂

JSON Verilerinin Swift 2.2 programlama dilinde nasıl kullanıldığını genel anlamda anlatmaya başlamadan önce (Apple) Mac bilgisayarı olmayan; ama benim gibi Swift öğrenmek isteyen arkadaşlar için kısa bir bilgilendirme yapmak istiyorum.

Öncelikle şunu söyleyeyim. Eğer bir Mac bilgisayar alabilecek durumunuz varsa bence hemen gidin alın 🙂
Ama Mac bilgisayar’a verecek param yok diyorsanız aşağıdaki linkler size yardımcı olacaktır ;

Sanal Makinaya Mac OS X Kurulumu (El Capitan OS X)

Sanal Makinaya Mac OS X Kurulumu (El Capitan OS X) – Alternatif Link

Sanal Makina üzerine Mac İşletim Sistemini kurduktan sonra Xcode 7.3 (şuan ki en güncel sürüm) programını indirip (Apple’ın kendi sitesinden indirebilirsiniz.) kurarak Swift 2.2 sürümü ile programlama yapmaya başlayabilirsiniz.

Bir programcının, kendi alanındaki yenilikleri elbette ki takip etmesi gerekmektedir. Fakat Swift, çok yeni bir programlama dili olması sebebiyle, yapısal olarak ta sürekli bir yenilenme halinde olduğu için; mümkün olduğunca en güncel Mac Sistemini kullanmak zorundayız. (Şu an en güncel sistem olarak Mac OS X : El Capitan, iOS SDK : 9.3, Xcode : 7.3 sürümleri makale anlatımı sırasında kullanılmıştır.)

Daha önce Android ve Java platformlarında JSON kullanımı için yazdığım makalelerde ki olduğu gibi; bu makalede de, String tipi değişkenlerde tuttuğum JSON verilerini Swift 2.2 programlama dilinde kullanacağım.

yukarıdaki gibi bir JSON verimiz olsun ve biz bu JSON’daki “mesaj” anahtarına atanmış String’i ekrana yazdıralım..

Kodu adım adım anlatacak olursak; ilk olarak JSON verimizi JSON String adında bir String değişkenine atıyoruz.

Burada ki let , bize değişkenin sabit değerli bir değişken olduğu göstermektedir. Yani Java ve Android dillerindeki final anahtarının kullanımıyla aynı görevi görmektedir. Değişken oluşturulurken sabit bir değer olarak atanır ve bir daha değiştirilemez.
Swift programlama dilinde değişken oluştururken; o değişkenin tipinin ne olacağını belirtmemize gerek yoktur. (Bazı istisnalar hariç)
Xcode programı; değişkene atadığımız veriye göre o değişkenin hangi tipte olacağını algılar ve programı ona göre derler.

JSONString değişkenimizi NSData sınıfından türemiş olan data nesnesine aktarıyoruz.

data’yı da oluşturduktan sonra JSON data’mızı ayrıştırma (Serilization) işlemini gerçekleştiriyoruz. Java ve Android’de olduğu gibi bu işlemi try-catch yapısı içinde gerçekleştiriyoruz.

Burada JSONVerisi adında ve [String:String] tipinde “anahtar”:”değer” ilişkisine sahip bir Dictionary değişkeni oluşturmuş oluyoruz.

Swift’te Dictionary değişkenleri Java’da ki Map ve JSON nesneleri gibi anahtar-değer ilişkisine bağlı değişkenlerdir.

Oluşturmuş olduğumuz JSONVerisi değişkeninden “mesaj” anahtarıyla ilişkilendirilen String değerini bir String değişkenine atayıp ekrana yazdırıyoruz.

Son olarak try-catch bloğunun catch kısmını da ekliyoruz. Eğer JSON ayrıştırma işleminde herhangi bir hata ile karşılaşılırsa bu kısımdaki kodlar çalışacaktır.

Kodun Tamamı:

viewDidLoad() fonksiyonu program açıldığında yapılacak işlemlerin belirtildiği fonksiyondur. Uygulamayı çalıştırdığınızda Xcode ekranında şu çıktıyı alacaksınız:

Şimdi anahtar kelimelerde farklı tiplerdeki değerlerin barındığı başka bir örnek yapalım.

2. Örnekte:
“Programlama Dili” isimli anahtar, String (yazı) tipindeki “Swift” değerini
“Version” isimli anahtar, Int (tam sayı) tipindeki 1 değerini
“iOS SDK” isimli anahtar, Double (virgüllü sayı) tipindeki 9.3 değerini
“Internet Durumu” isimli anahtar, Bool (true veya false) tipindeki true değerini bize vermektedir.

İlk örnekte “mesaj” anahtarı vardı ve bu anahtar bize String tipi bir değeri vermekteydi. Bu yüzden ilk örnekteki JSON ayrıştırma (Serilization) işleminde Dictionary değişkenimizdeki anahtar-değer ilişkisini [String:String] şeklinde kurmuştuk. Yani String tipinde anahtarların bize yine String tipinde değerler verdiği bir anahtar-değer ilişkisi kurmuştuk..

Fakat 2. örnekte her anahtarın farklı tipte değerler verdiğini görmekteyiz. Dolayısıyla bu kez anahtar-değer ilişkimizi [String:AnyObject] şeklinde kurmalıyız. Bu sayede String tipinde olan anahtarlardan farklı tiplerde değerler alabileceğiz.

Örnek 2’ye göre JSON verisinin String’ini ve buna bağlı olarakta data değişkenimizi oluşturuyoruz.

JSON Serilization işlemini gerçekleştiriyoruz. Kodun sonunda da gördüğünüz gibi anahtar-değer ilişkimizi [String:AnyObject] şeklinde kurduk.

json1 değişkenine “Programlama Dili” anahtarının değerini String verisi olarak atama işlemini gerçekleştiriyoruz. Atama işlemi tamamlandığında elimizde json1 isminde bir String değişkeni olacaktır, ve biz artık bu değişkeni ekrana yazdırabiliriz.

Eğer Örnek 2’de “Programlama Dili” adında bir anahtar mevcut olmasaydı, json1 değişkeni oluşmayacak ve dolayısıyla if bloğu içinde yer alan print(“Kullanılan Programlama Dili : \(json1)”) çalışmayacaktı. Bu yüzden JSON verileriyle işlem yaparken anahtar kelimelerimizi doğru yazmaya dikkat etmeliyiz.

json2 değişkenine “Version” anahtarının değerini Int tipinde bir veri olarak atayıp ekrana yazdırıyoruz.

Aynı şekilde json3 değişkenine “iOS SDK” anahtarının değerini Double tipinde bir veri olarakatayıp ekrana yazdırıyoruz.

json4 değişkenine “Internet Durumu” anahtarının değerini Bool tipinde bir veri olarak atıyoruz. Daha sonra bu değişkenin değerini kontrol ediyoruz. Eğer değişkenin değeri true ise ekrana “İnternet Durumu : Bağlı”, true değil ise ekrana “İnternet Durumu : Bağlı Değil” yazdırıyoruz.

Burada oluşturmuş olduğumuz json1, json2, json3 ve json4 değişkenleri; sadece oluşturulmuş oldukları if bloklarının içinde tanımlı olmaktadır. Yani bu if bloklarının dışından her hangi bir yerden bu değişkenlere erişim mümkün olmayacaktır.

Kodun Tamamı:

Peki Örnek 2’de bulunan değerleri bir JSON Dizisi (JSON Array) şeklinde Swift ile kullanmak istersen nasıl yapabiliriz?

Örnek 2’de ki değerleri bir JSON dizisi haline getirdik ve sonuna [String:String] tipinde  “Web”:”umutonur.com” anahtar-değer ilişkili bir  eleman daha ekledik.

Kodlarımızı yazmaya başlayalım..

Gördüğünüz gibi bu kez json değişkeninin tipini belirlerken [AnyObject] kullandık. Burada köşeli parantez içinde değer tipi – [ değer tipi ] kullanarak json değişkeninin farklı değer tiplerini barındıran bir dizi (Array) olacağını belirlemiş oluruz. Eğer bizim json değişkenine atadığımız dizi (Array) sadece tek tip veri çeşidini barındırıyor olsaydı AnyObject yerine o veri tipini belirtecektik. Yani String tipi değerlerden oluşan bir dizimiz olsaydı [String] şeklinde düzenleme yapabilirdik.

Şimdi dizinin ilk elemanını bir değişkene atayıp ekrana yazdıralım.

json değişkenimiz bir dizi yani Array olduğuna göre; normal bir Array‘ın elemanlarına nasıl ulaşıyorsak json‘un elemanlarına da aynı yöntemle ulaşabiliriz.

Yani json, 5 elemanlı bir dizi olduğuna göre;

json[0] bize 1. elemanı,
json[1] -> 2. elemanı,
json[2] -> 3. elemanı,
json[3] -> 4. elemanı,
ve json[4] -> 5. elemanı verecektir.

Ayrıca normal bir Array‘ın eleman sayısını array.count şeklinde öğrendiğimize göre json.count yaparak json‘un eleman sayısını da öğrenebiliriz. (Kısacası bir Array ile yapabileceğiniz eleman ekleme, silme v.b. işlemlerin hepsi json için de aynı şekilde geçerlidir.)

Kodun Tamamı:

Son olarak tüm anlattıklarımızı kullandığımız bir örnek yaparak makalemizi sonlandıralım.

Yazacağımız bu program bilgileri yukarıdaki JSON verisinden alacaktır.
Program “Sonuçlar” anahtarında bulunan dizide ki öğrencilerin notlarını kontrol edecek, geçme notu olan 45’in üzerinde puan alan öğrenciler başarılı,  45’ten az puan alan öğrenciler ise başarısız olarak ekrana yazdırılacaktır.

JSON verimizi data değişkenine atama işlemi ile programa başlıyoruz.

not ve isim adında tipleri sırasıyla Int ve String olan 2 değişken oluşturuyoruz.
Değeri 45 olan not değişkenini her öğrencinin sınav puannıyla karşılaştırarak başarılı olup olmadığını ona göre karar vereceğiz.
isim değişkenine ise; sonucuna baktığımız her öğrencinin ismini atayarak bu öğrencileri sınav sonuçlarıyla birlikte ekrana yazdıracağız.

Not : JSON verisinden aldığımız bilgileri değişkenlere aktarırken bu değişkenlere sadece ilgili if bloğundan erişilebildiğini makalenin başında belirtmiştik. isim değişkenini ayrıca tanımlamamızın temel sebebi de aslında budur.

İlk olarak “Programın Adı” anahtarının değerini String olarak program değişkenine aktarıp, bu değişkeni ekrana yazdırıyoruz.
Daha sonra ise “Geçme Notu” anahtarının değerini Int olarak not değişkenine aktarıp ekrana dersi geçmek için alınması gereken sınav puanını yazdırıyoruz.

“Sonuçlar” anahtarında barındırdığımız diziyi jsonArray değişkenine aktarıyoruz. Dizi [String:AnyObject] tipindeki elemanlardan oluştuğu için jsonArray‘ın tanımlanma işlemini [[String:AnyObject]] şeklinde yapıyoruz ve sınava giren öğrenci sayısını ekrana yazdırıyoruz.

for döngüsü kullanarak jsonArray’daki elemanları teker teker sonuc değişkenine aktarıp kullanıyoruz. Döngü her döndüğünde;
her elemanın “Öğrenci Adı” anahtarındaki değerini String tipinde daha önce tanımlamış olduğumuz isim değişkenine aktarıyoruz.
Daha sonra “Notu” anahtarındaki Int değerini geçiçi olarak gecmeNotu değişkenine aktarıp bu değişkenin değerini;  daha önce belirlediğimiz not değişkeninin değeri ile karşılaştırıyoruz. Eğer gecmeNotu değeri not değişkeninin değerinden büyük veya eşit ise öğrencinin başarılı olduğunu, değil ise öğrencinin başarısız olduğunu ekrana ismiyle birlikte yazdırıyoruz.

Kodun Tamamı:

Programın Ekran Çıktısı:

 

Eveett…
Bir makalenin daha sonuna geldik..
Şu anlattıklarıma makale diyince de kendimi bi değişik hissediyorum ama olsun. Makale makaledir..

Hoşçakalın.

Happy Codings… 🙂




You may also like...

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.