Json Nedir?
Json, Javascript uygulamaları için oluşturulmuş bir veri formatıdır. Javascript Object Notation’ın kısaltmasıdır. Json’ın çıkış amacı veri transferlerinde verilerin XML’den daha az yer kaplamasını sağlamaktır. Şu an sadece Javascript uygulamalarında değil, yazılım geliştirmede kullanılan bir çok teknolojide Json formatındaki veriler tercih edilmektedir.
- Java uygulamaları
- .Net uygulamaları
- PHP uygulamaları
- Web servis uygulamaları
- Mobil uygulamaların veri transferleri
gibi bir çok noktada veriler Json formatında kullanılmaktadır.
Json Veri Formatı
Json türündeki veriler iki parçadan oluşur: key (anahtar) ve value (değer). Anahtar’da nesnenin hangi özelliğinin olduğu (koddaki değişken ismi gibi düşünülebilir) tanımlanırken değerde ise anahtar özelliğinin değeri (değişkenin değeri) tanımlanır. Nesnelerdeki anahtar ve değerler string türünde tanımlanır. Aşağıda basit bir json nesnesi örneği bulunmaktadır.
{ "Ad": "Veysel Uğur", "Soyad": "Kızmaz" }
Yukarıdaki örnekte 2 tane anahtar ve 2 tane değer vardır: “Ad” anahtarının değeri “Veysel Uğur” , “Soyad” anahtarını değeri ise “Kızmaz” olarak tanımlanmıştır.
Nesne içerisinde istediğiniz kadar anahtar – değer (key-value) ikilisi tanımlayabilirsiniz.
{ "Ad": "Veysel Uğur", "Soyad": "Kızmaz", "Bolum": "Bilgisayar Muhendisligi", "Sehir": "Ankara", "Telefon": "05000000000" }
Json Nesne (Object) Yapısı
Her Json nesnesi süslü parantez ile başlar ve içinde sonsuz sayıda key-value ikilileri bulunabilir. Json.org sitesinde bu durumu anlatan güzel bir grafik mevcut:
Her Json nesnesi süslü parantez içinde tanımlanır. Nesne içinde anahtar (grafikte string) ve değer (grafikte value) tanımlamaları, araya iki nokta üst üste karakteri gelecek şekilde tanımlanır. Nesne içindeki her key-value ikilisinden sonra virgül karakteri kullanılır. Nesnenin tanımlaması bittikten sonra süslü parantez kapatılır.
Örnek 1: 1 key-value’ya sahip Json nesnesi: “Ad” anahtarının değeri : “Veysel Uğur”.
{ "Ad": "Veysel Uğur" }
Örnek 2: 2 key-value’ya sahip Json nesnesi: “Ad” anahtarının değeri: “Veysel Uğur” , “Soyad” anahtarının değeri “Kızmaz”
{ "Ad": "Veysel Uğur", "Soyad": "Kızmaz" }
Json Dizi (Array) Yapısı
Her Json dizisi köşeli parantez ile başlar ve içinde sonsuz sayıda değer bulunabilir. Dizilerde key-value ikilileri yoktur. Sadece string değer alabileceği gibi Json nesnesi de tanımlanabilir. Json.org sitesinde bu durumu anlatan güzel bir grafik mevcut:
Her Json dizisi köşeli parantez içinde tanımlanır. Dizi içindeki tüm değerler aralarında virgül karakteri gelecek şekilde tanımlanır. Dizinin tanımlaması bittikten sonra köşeli parantez kapatılır.
Örnek 1: 1 string değere sahip Json dizisi
[ "Veysel Uğur" ]
Örnek 2: 2 string değere sahip Json dizisi
[ "Veysel Uğur", "Kızmaz" ]
Örnek 3: 1 Json nesnesine sahip Json dizisi
[ { "Ad": "Veysel Uğur", "Soyad": "Kızmaz", "Bolum": "Bilgisayar Muhendisligi", "Sehir": "Ankara", "Telefon": "05000000000" } ]
Örnek 4: 2 Json nesnesine sahip Json dizisi
[ { "Ad": "Veysel Uğur", "Soyad": "Kızmaz", "Bolum": "Bilgisayar Muhendisligi", "Sehir": "Ankara", "Telefon": "05000000000" }, { "Ad": "Neslihan", "Soyad": "Yağmur", "Bolum": "Tıp Fakültesi", "Sehir": "Malatya", "Telefon": "05000000001" } ]
Örnek 5: 2 Json nesnesi ve 1 string değere sahip Json dizisi
[ { "Ad": "Veysel Uğur", "Soyad": "Kızmaz", "Bolum": "Bilgisayar Muhendisligi", "Okul": "Gazi Üniversitesi", "Sehir": "Ankara", "Telefon": "05000000000" }, "Asp.Net MVC 5", "Uygulamalarla Asp.Net 4.5" ]
Json Değerlerinin Alabileceği Veriler
Json değerlerinin string veri türünde yazıldığını yukarıda belirtmiştim. Json nesnelerinin içinde değerler (value) farklı türden veriler de alabilirler: “dizi”, “boolean veri (true, false)”, “null”, “Json Nesnesi”. Json değerlerinin esnek yapısı uygulama geliştirme aşamasında büyük kolaylıklar sağlayacaktır.
Örneğin yazar bilgilerinin bulunduğu Yazar ve yazarın kitaplarının bulunduğu Kitap türünde iki sınıfımız olsun. Bir yazarın birden fazla kitabı olabileceği için Yazar nesnesinin içinde birden fazla Kitap tanımlanmasına olanak sağlamalıyız. Aşağıda Yazar ve Kitap isimli C# sınıflarını tanımladım.
public class Yazar { public string Ad { get; set; } public string Soyad { get; set; } public List<Kitap> Kitaplar { get; set; } } public class Kitap { public string Ad { get; set; } public int BaskiSayisi { get; set; } }
Yazar sınıfı türünden bir nesne tanımalyalım. Tanımladığımız yazarın 2 tane de kitabı olsun.
Yazar yazarVeyselUgurKizmaz = new Yazar { Ad = "Veysel Uğur", Soyad = "Kızmaz", Kitaplar = new List<Kitap> { new Kitap { Ad = "Uygulamalarla Asp.Net 4.5", BaskiSayisi = 5 }, new Kitap{ Ad = "Asp.Net MVC 5", BaskiSayisi = 2 } } };
Yukarıda C# kodlaması ile tanımladığımız veriyi Json ile tanımlayalım:
{ "Ad": "Veysel Uğur", "Soyad": "Kizmaz", "Kitaplar": [ { "Ad": "UygulamalarlaAsp.Net4.5", "BaskiSayisi": "5" }, { "Ad": "Asp.NetMVC5", "BaskiSayisi": "2" } ] }
- İlk satırda nesnenin başlangıç süslü parantezini tanımladık.
- “Ad” ve “Soyad” özelliklerini ve değerlerini 2. ve 3. satırda tanımladık.
- 4. satırda “Kitaplar” özelliğinde (anahtarında) kitap dizisi tanımladık. Dizinin içine 2 tane eleman ekledik (yazarın kitapları). Her elemanın “Ad” ve “BaskiSayisi” özelliklerine (anahtarlarına) değerlerini tanımladık.
- Dizi tanımlamasını bitirdikten sonra son satırda süslü parantez ile nesneyi sonlandırdık.
Böylelikle C# ile oluşturduğumuz nesnenin aynısını Json formatında da oluşturmuş olduk.
Json Değerlerinde Kullanılamayan (Özel) Karakterler
Json formatında bir nesne ya da dizi oluştururken bazı karakterlerin kullanımı için karakterin başına “\” eklenmesi gerekir. Bunlar Json.org sitesindeki güzel bir grafik ile anlatılmıştır: