Programlama ile ilgileniyorsanız, hele de az çok web teknolojilerine yakınlığınız varsa, javascript ile neredeyse özdeşleşmiş bir isim illaki gözünüze çarpmıştır. Nedir o isim? “JSON”! Çoğu kaynakta json isimli bir programcının bu tekniğe ismini verdiği söylenmektedir ama sanırım bir ismin öyküsüne bu kadar takılmamakta fayda var. En azından bu portalın amaçlarıyla bağdaşmayan bir yön.. Ama yeri gelmişken şunu hemen eklemeliyim; JSON bir kodlama tekniğidir ve bir çok bilgisayar programlama dilinde uygulanabilmektedir. Bu dillerden birisi de javascript’tir. Bize de şimdi bu dille JSON tekniğini açıklamak düşüyor. Gelin öncelikle bir kısa kod örneği verip üzerinde konuşalım..var zamansal = new Date();var insan = {“dogumYil” : 0,”boy” : 0,”memleket” : ”,”yasKacHemserim” : zamansal.getYear() – dogumYil}var recep = new insan;recep.dogumYil = 1980;recep.boy = 175;recep.memleket = “istanbul”;alert(recep.yasKacHemserim);
“new insan” ibaresini görenler, bunun bir sınıfsal yapı olduğunu hemen anladılar sanırım. Evet aynen öyle. Yaptığımız tam anlamıyla bir sınıf oluşturmak ve bu sınıfın metodlarını kullanabilen recep isminde bir nesne tanımlamaktı.. İşte json tekniği bundan ibaret.. Ama bir iki püf noktasına da değinmek istiyorum.Bildiğiniz gibi xml dili veri etiketlemekte kullanılan global bir standart ve bilmeyen (en azından ismini telaffuz etmeyen) yok gibi.. Peki size şimdi yukarıdaki javascript kodu ile xml arasında bir ilişki var desem ne düşünürsünüz? Durun bişey düşünmeye başlamadan önce şuna bir bakın;1980
175
istanbul


Bu da yukarıdaki kodun xml hali.. Yani anlatmak istediğim, json tekniğini kullanarak xml’in durağanlığına nazaran nesne yönelimli programlamanın nimetleri emrimize amade olmakta. Bu da yetmezmiş gibi verileri etiketleye de biliyoruz. Ne işimize yarar demeyin! Gelin şimdi şöyle bir senaryo düşünelim. Diyelim ki bir web sayfanız var ve çoklu dil desteği eklemek istiyorsunuz. Bildiğiniz gibi web sunucu yazılımları, kendilerinden web sayfası isteyen tarayıcılardan kimlik bilgisi sorar ve bu bilginin içinde tarayıcının o anda hangi dille kullanıldığı bilgisi de yer almaktadır. Hal böyle olunca server’lar ziyaretçilerinin dilini görebilmekteler. Diyelim ki dil tanımı “tr” ile etiketlenmiş bir ziyaretçi gelmiş olsun. Sunucu hemen göndereceği sayfada “script” taglarının arasına gelip iletişim kurmak için kullanılacak “tr” mesajları yapılandırmayı demin verdiğimiz json yapısının gereklerine uygun olarak dizecek.. İçinde kullanıcılara bir takım bilgilendirmeler sunacak olan başlık, menü, buton gibi alanların “html” için id bilgileri tanımlanmış olsun. Şimdi tek ihtiyacımız olan standart bir dağıtıcı javascript fonksiyonu.. Bu fonksiyon, sunucunun etiketleyip tarayıcıya yolladığı json değişkenlerine erişip, tuttuğu sözcükleri gereken yerlere yerleştirecek (gereken yer bilgisi de json içinde saklanabilir). Bildiğiniz gibi “innerHTML” metoduyla sayfamıza dinamik olarak sonradan yeni bilgiler yazabiliyoruz. “body” tag’ına ekleyeceğimiz “onLoad” olayına dağıtıcı fonksiyonu referansladığımızda artık web sayfamızdaki mesajlar ve yazılar (arayüz dili) kullanıcının dilinde gelecektir. Böylece çok basit bir şekilde dosyalar içinde sözcüklerin tercümelerini json ile etiketleyip tutmak, sitemize dil desteği eklemek için yeterli olacaktır. (biliyorsunuz ki hiç uğraşmadan bir dosyayı sunucu tarafında istediğimiz bir bölgeye include (dahil) edebiliyoruz).Peki şimdi birde bu senaryoyu xml ile yaptığınızı planlayınız! Aklınıza hemen kendi oluşturduğunuz xml taglarını parse etmek (ayrıştırmak) geldi değil mi? Evet zaten başka bir çaremiz de yok. İçinde bir dile ait sözcükleri barındıran bu xml dosyasını ister sunucu tarafında ayrıştırıp sözcükleri gerekli alanlara yazarak ziyaretçiye yollayın, ister bu xml ağacını tarayıcıya yollayıp ziyaretçinin bilgisayarında barınan işlem kapasitesini kullanarak (javascript ile) ayrıştırın. Sonuç olarak her halükarda bir parse işlemine katlanmak durumundasınız. Oysa javascript, basit bir değikene erişir gibi, hiç bir ayrıştırmaya gerek olmadan size bu imkanı vermektedir. Bu şekilde herhangi bir ayrıştırma maliyetine katlanmadan çok hızlı bir şekilde verileri yönetme şansınız olur.Bir püf noktası daha vermenin zamanı geldi. Javascript’e aşina olanlar mutlaka bilirler ki “eval” diye hazır gelen bir fonksiyonumuz bulunmaktadır. Peki ne işe yarıyor bu fonksiyon? İçine yazdığınız string (metin) türündeki verileri eğer kod biçiminde ise çalıştırıyor. Durun transit bir örnek verelim hemen;eval(“var x=10”);alert(x);
Gördüğünüz gibi çift tırnak içinde bir program kodu var. Bildiğiniz gibi çift tırnak bir çok programlama dilinde string (metin) türünden verileri temsil eder. Durum burada da tamamen aynı. Yani “x=10” ifadesini bir alert içerisine tırnaklar ile koysa idik tıpkı bir metin gibi bize gösterilecekti, ama burada eval o ifadeyi alıp x değişkenine 10 değerini yazıyor. Programın alt satırlarında x’e bir değişkenmiş gibi rahatlıkla erişiyoruz (ki “x” zaten tam anlamıyla bir değişken olmuş oluyor)..Ajax bildiğinizi de var sayıyorum ve şimdi konuyu bağlıyorum. En yukarıda json tekniği diyerek verdiğimiz javascript kodu diyelim ki bir txt dosya içerisinde sunucuda duruyor olsun! Ajax ile bu txt dosyasına erişip içindeki json ile etiketlenmiş tüm program kodunu tıpkı bir metin ifadesi gibi alıyoruz ve doğrudan eval fonksiyonundan geçiriyoruz (!) Evet çok heyecanlı değil mi?Gördüğünüz gibi sayfamızı yenilemeden bir takım verileri aldık, aldığımız bu verileri çalıştırılabilir bir programa dönüştürdük. Bu ne işimize yarar? Deminki verdiğimiz dil desteği senaryosunu hatırlayınız! İşte kullanıcı sayfada gözüken dili değiştirmek isteyip örneğin “ingilizce”yi seçerse, hiç bir şeyi yeniletmeden, ajax ile sunucudan “ingilizce” dosyasını isteyip “eval”den geçiririz. Böylece kullanmakta olduğumuz dağıtıcı fonksiyonu sanki sayfa yeni yükleniyormuşçasına tekrardan çağırmak ve gerekli alanları yapılan yeni seçime göre güncellemek mümkün olacaktır. Yani önümüzde duran sayfanın dili bir anda ve hiç bir yeri kımıldamadan değişiveriyor. Çok kullanışlı değil mi?İşte gördüğünüz gibi json bir nesne odaklı programlamadan öte bir veri etiketleme sistemidir. Ancak xml’in aksine etiketlediğimiz verileri ekstradan ayrıştırma zahmetine katlanmadığımız gibi, json etiketleri fonksiyon da olabilmektedir. Yani öyle bir xml tag’i düşünün ki ona eriştiğinizde size bir takım hesaplamalar yapabilsin. Günümüzde kullanımı yaygınlaşan hazır javascript library’lerin çoğunda çekirdek kısmı da dahil, yer yer json kullanılmaktadır.Alın size bir yetenek daha! İki ayrı json ile kodlanmış sınıfınız olsun! Örneğin birisi yukarıda ilk örnekte yaptığımız “insan” sınıfı, diğeri de misal öğretmenlik mesleğinin gereklerini yerine getiren ve bir takım fonksiyonlardan oluşan bir başka sınıf, yani “ogretmen” olsun. Yani bu iki sınıfı ayrı ayrı yerlerde kodlamış olun. Yine javascript ile hazır gelen bir başka fonksiyon daha var. ismi “Apply”. Bu komut ile iki sınıfı birleştirebiliyorsunuz. Yani diyelim ki bir yerlerde bu iki sınıfı “Apply” ile birleştirdiniz. Daha aşağılarda da “insan” sınıfından “recep” diye bir nesne tanımladınız. İnsan sınıfında öğretmenliği tanımlamamış olmamıza rağmen receb’in ogretmenlik gibi bir meziyeti daha olmuş oluyor. İsterseniz daha sonra recebi bir polis olarak işe almanız, kadro vermeniz de mümkün:)) Çünkü iki sınıfı birleştirdik. Recebin iş sektörünü değiştirmek istediğimizde bir başka sınıfla birleştirmek yeterli olacaktır (!)Gördüğünüz gibi kalıtım özelliği takdire şayan. Kullanılabilirliği ve esnekliği ise becerinize kalmış. Herkese bol json’lı günler dilerim..Saygılar…