JSON
JavaScript Object
Notation konusundan sizlere bahsedeceğim. Giriş düzeyinde başlayacak
yazımda ileri ve üst düzeyde kullanımını, faydaları ve götürüleri
ile alternatifleri hakkında sizlere yazı serileri ile bilgi vermeye
çalışacağım
JSON genelde XMLin zayıflatılmış alternatifi olarak gündeme gelir.
Temelde XML gibi bir veri değişim formatıdır. İnsanların okuyup
anlaması için kolay, programlama dillerinin de dönüştürme ve
yorumlamaları için oldukça kolaydır. Temel olarak Javascript
programlama dilinin Standart Ecma-262 3.Yayın - Aralık 1999
sürümünün alt kümesi üzerine kurulmuştur. Metin tabanlı veri
değiştirme formatı olduğu için ve C türevi dillere benzeyen
yazılımından dolayı, bu tür dillerde rahatlıkla işlenebilir.
JSON iki adet temel yapıda gündeme gelir:
İsim/değer çifti kolleksiyonu: Çoğu programlama dilinde object,
record, struct, dictionary,hash table, keyed list veya associative
array olarak da tanımlanır.
Sıralı değer listesi:Çoğu programlama dilinde array, vector, list
veya sequence olarak yer alır.
Bu yapıları JSON daki ifadelerini ele alırsak aşağıdaki şekilde
ifade edilirler:
Object
Bir nesne isim/değer çiftlerinin sırasız olarak birleşmesinden
oluşur. Nesne tanımlaması { ile başlar } ile biter. Her bir isimden
sonra : gelir ve isim/değer çiftleri , ile ayrılır. Örnek olarak
aşağıdaki yapı bir nesne oluşturur.
{
Adi: Mustafa,
Soyadi: Kara
}
Array
Diziler, sıralı değer listesidir. Bir dizi [ ile başlar ve ] ile
biter. Elemanları , ile ayrılır. Aşağıda bir ve iki boyutlu dizi
tanımlanmasını görebilirsiniz.
[ Pazartesi , Salı , Çarşamba ,
Perşembe , Cuma , Cumartesi , Pazar ]
[
[ 1, 0, 0 ],
[ 0, 1, 0 ],
[ 0, 0, 1 ]
]
JSON içinde herhangi bir değer aşağıdakilerden biri olabilir:
içinde yazı (string)
sayı
true yada false
null
object veya array
Değerler kendi içinde nesneleri desteklediği için iç içe
nesneleri de desteklemesi mümkündür. Örnek olarak sayfaının sağında
bulunan ajax-tr son yorumlardan iki adedini JSON ile ifade edersek
aşağıdaki yapı olacaktır.
[
{
Başlık : 30 Saniyede AJAX,
Yorum Sayısı: 43,
Yorumlayanlar:[ihtiyarus,Emin,Deniz]
} ,
{
Başlık: eyceks Kütüphanesi ve Örnek bir Uygulama,
Yorum Sayısı: 39,
Yorumlayanlar:[Mevlüt Güleç, sezai, Sinan Erdem]
}
]
Bu kadar teorik bilgiden sonra giriş seviyesinde kullanım
yöntemlerini ve artılarını tanıyalım.
JSON tamamiyle Unicode (varsayılan olarak UTF-8) çalışır. Türkçe
problemini kesinlikle yaşamayacağınız veri aktarım formatlarından
biridir.
JSON sürüm numarasına sahip değildir.Sürüm numarası olsa idi,
oturana kadar 3.0′ı beklerdik. JSON grameri kesindir, ve tamamıyle
oturmuş ve düzgün çalışan bir yapıdadır.
Postelin Kabul ederken esnek ol, gönderirken tutucu ifadesine
uygun yapısı vardır. O yüzden JSON yorumlayıcılar JSON harici
formatları kabul eder, ama JSON oluşturucuların sağlıklı çalışması
için geçerli bir JSON ifadesi oluşturması şarttır.
Bu JSONun genişletilmesine izin verir. Örnek vermek gerekirse
Javascript JSONun bir üst kümesidir ve doğal olarak JSON desteğine
sahiptir. Ve XML haricinde neredeyse tüm dillerin veri aktarımları
için kullabildiği ve desteklediği bir formattır. Örnek vermek
gerekirse MsAjax.NET altyapıda veri transferi için XML yerine JSON
kullanır.
Kullanım örneği için sunucundan Geçerli kullanıcının adını soyadını
alan ve bunu dokümana yazan kısmı örnek olarak vereceğim ve aynı
işlemi XML transferi ile yaptığımızda nelerin değişeceğini
inceleceğim.
Sunucu Ad = Mustafa, Soyad = Kara verisini bize ulaştırmak istesin
bu veriyi aşağıdaki formatta bize gönderecektir.
{
Ad : Mustafa,
Soyad: Kara
}
Aynı veri XML ile bize ulaşması durumunda
<user>
<Ad>Mustafa</Ad>
<Soyad>Kara</Soyad>
</user>
Boşlukları hiç koymadan gönderdiğimizi varsayarsak JSON bu kadar
ufak bir veride bile toplamda data kısmında 31 karakter, XML ile 45
karakter ile sunucudan %25 daha az veri alıyoruz. Dolayısıyla daha
hızlı alıyoruz.
Bu veriyi yorumlama kısmı öncesinde javascript içinde XMLHttpRequest
nesnesinin responseText ile aldığınız bir veriyi responseText
değişkenine atamış olalım. Bunu yorumlamak ise JSON ile aşağıdaki
gibi olacaktır:
UserData = eval(('+responseText +)');
Ve Ad ve Soyad değişkenlerini de dokümana yazdıralım
document.write(UserData.Ad + + UserData.Soyad);
Javascript fonksiyonunda texti evale sokunca bu şekilde javascript
objesi oluşturması ilk başta banada inanılmaz gelmişti ama
denedikten sonra mucizenin büyüklüğünü kavradım. JavaScript JSON un
üst kümesi olduğu için bu inanılmaz iç içelik anlam kazanmıştı.
Aynı işlemi XML ile yapmaya kalkarsak farklı yollarımız var.
XmlDocument oluşturup XSL ile xhtmle dönüştürüp dokümana
yazdırırız.(en az 6 satır kod artı yorumlama maliyeti karşımıza
çıkar)
XmlDom oluşturup düğümleri içinde gezer, Ad düğümünü bulup değerini
alıp, Soyad düğümünü bulup değerini alırız. Sonra yazdırırız.(Aynı
şekilde en az 6 satır kod ve yorumlama maliyeti)
Yukarıda bahsettiğim datanın aktarılmasındaki boyut azalması ve
işleme kolaylığı yüzünden JSON AJAX taki X in yerini almaya çoktan
başlamıştır. Bazı geliştiriciler artık AJAJ (Asynchronous JavaScript
and JSON) terimini kullanmaya başlamışlardır. Bazı geliştiriciler
HTML sayfaları üretmek yerine HTML taglarını JSON ile transfer
etmeye başladılar ve istemcide HTML kodlarını dinamik olarak
üretiyorlar.
Bu yazımda JSON konusuna bir girişte bulundum, takip eden
yazılarımda JSON ile veri transferinin getirdiği faydaları ve
dezavantajlarından, çeşitli sunucu tabanlı diller ile
kullanımlarından, XML Web Servislerinin yerini almaya başlayan JSON
Web Servislerinden bahsedeceğim
|