JSON Nedir?

JSON (JavaScript Object Notation) insan tarafından okunabilir (human-readable), tamamiyle anahtar-değer (key-value) yapısına dayalı, günümüzde XML‘e göre çokça tercih edilen, standartlaşmış, dilden bağımsız bir veri taşıma formatıdır.

JSON günümüzde çoğunlukla sunucu-istemci (server-client) arası veri haberleşmesinde kullanılmaktadır.

Örnek verecek olursak; yazdığınız bir mobil uygulama, sunucu (server) tarafında çalışan uygulamaya istekte bulunur, sunucu (server) tarafındaki uygulama isteği alır, istek türümüze göre JSON formatlı veriyi üretir ve mobil uygulamamıza gönderir. Sonuç olarak biz de mobil uygulamamızda veriyi işleriz ve tercihe göre kullanıcıya gösteririz.

Film bilgilerini tutan bir veritabana sahip bir sunucu uygulaması düşünelim. Mobil uygulama buraya istekte bulunur. Sunucu isteği alır, veritabanında sorgular eşleşme varsa JSON formatında veri üretir ve mobil uygulamaya gönderir. Mobil uygulamada da elde ettiği JSON içerisinden gerekli bilgileri çekerek kullanıcıya gösterir.

Sunucuya “ilkeraksoy.net/movies.php?name=transformers” şeklinde bir istek gönderdiğimizi düşünelim. Şayet veritabanında eşleşme varsa ve sunucu uygulaması iyi yapılandırılmışsa, sunucu yanıtı olarak dönecek veri aşağıdakine benzer yapıda olacaktır:

Yukarıdaki senaryoda sunucunun JSON verisi üretmesi bir varsayımdır. Sunucular, tercihe göre XML, JSON veya farklı yapıda veriler döndürebilecek şekilde oluşturulurlar.

Görüldüğü üzere JSON veri formatının en avantajlı tarafı, okunabilirliğinin (human-readable) kolay olmasıdır.

JSON iki yapı üzerine kurulmuştur:

  • İsim/değer çifti koleksiyonu. Çeşitli programlama dillerinde bu, “object, record, struct, dictionary, hash table, keyed list veya associative array” olarak da tanımlanmıştır.
  • Sıralı değer listesi. Çoğu programlama dilinde bu, “array, vector, list veya sequence” olarak tanımlanır.

Bu yapılar, evrensel veri yapılarıdır. Bütün modern programlama dilleri, bu yapıları, bir şekilde içlerinde barındırmaktadırlar. Programla dilleri arasında veri değişimi için kullanılan bir formatın, bu yapıları kullanarak oluşturulması da oldukça anlamlıdır.

Bu yapılar JSON’da, aşağdaki şekillerde gösterilirler:

Bir nesne (object), isim/değer çiftlerinin sırasız birleşiminden oluşur. Nesne tanımlaması, { (kıvırcık parantez aç) ile başlar ve } (kıvırcık parantez kapa) ile biter. Her “isim”den sonra : (iki nokta üstüste) gelir ve isim/değer çiftleri , (virgül) ile ayrılır.

Örnek:

 


Diziler, sıralı değer listesidir. Bir dizi [(köşeli parantez aç) ile başlar ve ](köşeli parantez kapa) ile biter. Değerler ,(virgül) ile ayrılır.

Örnek 1:

Örnek 2:

 


Bir değer, çift tırnak içinde bir string (yazı)sayıtrue (doğru)false (yanlış)null (boş değer)object (nesne) veya array (dizi) olabilir. Bu yapılar bir birlerinin içinde tekrar edebilirler.


Bir string (yazı), çift tırnak içinde, ters-bölü kodlarına da izin veren, sıfır veya daha fazla “Unicode” karakterin birleşiminden oluşur. Bir karakter, string (yazı) tipindeki tek karakter olarak gösterilebilir. String (yazı) tipi, C veya Java dilindeki “string” tipine çok benzemektedir.


Bir sayı C veya Java dilindeki sayılara çok benzer, ancak sekizli (octal) ve onaltılı (hexadecimal) rakamlar kullanılmamaktadır.


Neden XML veri formatını değil de JSON veri formatını tercih etmeliyiz? Aşağıda 4 futbolcuya ait kişi bilgileri iki formatta da ifade edilmiştir:

Dikkat edileceği üzere JSON veri formatının insanlar için okunabilirliği (human-readable) daha fazla.

Ve ayrıca her iki veri formatının da içerdiği karakterler sayılacak olursa; XML için 286 karakter, JSON için 179 karakter olduğu görülür. (Boşluk karakteri sayısı ihmal edilmiştir.) Basit bir matematiksel hesapla aynı verinin, JSON ile XML’e göre %37 daha az karakter kullanılarak ifade edilebildiği görülmektedir. %37 gibi bir sonucun veri iletimi açısından önemi bence hepimizce aşikâr.

 

İlgilenenler için, kullandığım ve başarılı bulduğum birkaç JSON verisi üretme ve ayrıştırma (parse) kütüphanesi:

https://github.com/nlohmann/json (C++)

https://github.com/fangyidong/json-simple (Java)

 

Referanslar:

https://en.wikipedia.org/wiki/JSON

https://www.json.org/