https://www.youtube.com/watch?v=WJxg3b_gb7c
JSON NEDİR?
Veri saklama formatıdır.
Veri Saklama ve Transfer Formatları;
- .csv
- .xml
- .json
- .bson
Json’ın diğerlerinden farkı;
Json(JavaScript Object Notation-JavaScript Nesne Notasyonu) insanlar için okunabilir olan bilgi saklama ve alışveriş formatıdır.
CSV Örnek(noktalı virgülle ayrılmış);
Adı; SoyAdı
Ahmet; Deniz
JSON Örnek;
{ } →Süslü parantezler Json nesnesi gönderdiğimizi belirtiyor.
[ ] → Tag’ler bir dizi gönderdiğimizi belirtiyor.
Tırnak içleride “key value” : “key value” şeklinde veri gönderimi yapıyor.
{
“Adi” : “Ahmet”,
“SoyAdi” : “Deniz”
}
Az veri olduğu için csv daha avantajlı gözüküyor. Veriyi arttırdığımızda;
CSV Örnek;
Adı; SoyAdı
Ahmet; Deniz
Ali; Ak
JSON Örnek;
[
{“Adi” : “Ahmet”
“Soyadi” : “Deniz”
},
{
“Adi” : “Ali”
“SoyAdi” : “Ak”
}
]
Json’ın okunurluğu artıyor tabi bunun yanında karakter sayısıda artıyor.
Hangi durumlarda .csv , .xml ya da json kullanmalıyız bunun püf noktaları vardır. Bunlara bakalım. Eğer çok büyük miktarda veri gönderiyorsak gönderdiğimiz byte miktarı önemliyse .csv tercih edilebilir. Bunun dışındaki tüm durumlarda Json kullanabilir.
CSV Örnek;
Adı ; SoyAdı
Ahmet ; Deniz
Ali ; Ak
46 Karakter
JSON Örnek;
[
{
“Adi” : “Ahmet”
“SoyAdi” : “Deniz”
},
]
“Adi” : “Ali”,
“SoyAdi” : “Ak”
}
]
84 Karakter
JSON Örnek (Aynı verinin daha da sıkıştırılmış hali);
[
{“Adi” : [
“Ahmet”, “Ali”
]},
{“SoyAdi” : [
“Deniz”, “Ak”
]
}
]
63 Karakter
Json’ı “key value” “key value” demek yerine bir kere “key value” diyerek “Adi” yazıp [tag’in içine bütün verileri gönderebiliriz. “SoyAdi” yazıp bütün soyadı verilerini gönderebiliriz. Bu tarz kullanımlar büyük verilerde çok kolaylık sağlar veriyi işlerken buna dikkat ederek işleriz.
Csv’de en az veri ile gönderiliyor fakat aşağıdaki gibi bir Json datasını csv ile göndermek çok zor.
{
“glossary”:{
“title”: “example glossary”,
“GlossDiv”:{
“title”: “S”,
“GlossList”:{
“GlossEntry”:{
“ID”: “SGML”,
“SortAS”: “SGML”,
“GlossTerm”: “Standard Generalized Markup Language”,
“Acronym”: “SGML”,
“Abbrev”: “ISO 8879:1986”,
“GlossDef”: {
“para”: “A meta- markup language, used to create markup
Languages such as DocBook.”,
“GlossSeeAlso”: [“GML”, “XML”]
},
“GlossSee”: “markup”
}
}
}
}
}
387 Karakter olarak gidiyor.Aynı veriyi xml’de gösterelim;
<DOCTYPE glossary PUBLIC “-//OASIS//DTD DocBook V3.1//EN”>
<glossary><title>example glossary </title>
<GlossDiv><title>S</title>
<GlossList>
<GlossEntry ID=”SGML” SortAs=”SGML”>
<GlossTerm>Standard Generalized Markup Language</Gloss Term>
<Acronym>SGML </Acronym>
<Abbrev>ISO 8879:1986</Abbrev>
<GlossDef>
<para>A meta-markup language, used to create markuP
Languages such as DocBook.</para>
<GlossSeeAlso OtherTerm=”GML”>
<GlossSeeAlso Other Term=”XML”>
</GlossDef>
<GlossSee OtherTerm=”markup”>
</GlossEntry>
</GlossList>
<GlossDiv>
<glossary>
538 Karakter
Burada verimiz büyüyor ve okunaklılığı azalıyor.
JSON Veri Tipleri
- Json Object
- Json Array
- String
- Boolean
- Rakam
- Null
Bir uygulama örneği yapalım ; File > new > Multi Device Application >Blank Application. Boş uygulama açarak başlıyoruz. Palette >Edit1- Label1- Button1- TMemo1 ekliyoruz. Label1>name→ Adı – Edit1> name→EditAd – Button1> name→ btnJsonYaz. Buttona çift tıklıyoruz kod satırına gidiyoruz kod yazmadan önce uses kısmına gidiyoruz system.JSON kütüphanelerini ekliyoruz kullanabilmek için.Kod yazmaya başlayabiriz.
procedure TForm2.btnJsonYazClick(Sender : TObject);
var
Jnesnesi : TJSONObject;
begin
Jnesnesi := TJSONObject.Create;
Jnesnesi.AddPair(‘Adi’,EditAd.Text),
Memo1.Lines.Add(Jnesnesi.ToString);
end;
end.
Çalıştırıyoruz edit’e veri giriyoruz ve memoya aktarıldığını görüyoruz.
Palette> Edit ekliyoruz bir tane daha. Edit>name→EditSoyad diyoruz. Tekrar aynı kod satırına gidip ekleme yapıyoruz.
procedure TForm2.btnJsonYazClick(Sender : TObject);
var
Jnesnesi : TJSONObject;
begin
Jnesnesi := TJSONObject.Create;
Jnesnesi.AddPair(‘Adi’,EditAd.Text),
Jnesnesi.AddPair(‘SoyAdi’, EditSoyad.Text);
Memo1.Lines.Add(Jnesnesi.ToString);
end;
end.
Çalıştırıyoruz adı ve soyadı kısmına veri giriyoruz memoda bunları yazdırdığını görüyoruz. İnternetten vs. Json nesnesi geldiğinde bunu Delphide nasıl parse edeceğimize bakalım. Palette> Button – Listbox. Button> name →btnJsonOku. btnJsonOku buttonuna çift tıklıyoruz;
procedure TForm2.btnJsonOkuClick(Sender : TObject);
var
Jvalue : TJSONValue;
begin
JValue := TJSONObject.parseJSONValue(Memo1.Text);
Listbox1.Items.Add(Jvalue.GetValue(<string>(‘Adi’)));
end;
Çalıştırıyoruz, Adi kısmına veri giriyoruz btnJsonYaz’a tıklıyoruz ardından btnJsonOku’ya tıklıyoruz adi parametresinin içindeki value değerini okuyoruz.
Yapı daha karışık olursa nasıl yapacağımıza bakalım. Daha karışık yapılar için hazır turlar var örneğin; Json Data Generator Tool var. http://c2design5sh.blogspot.com bu adresten indirebilirsiniz. Yazdığımız Json’a uygun Delphi syntax’ını bize hazırlıyor. Burada istediğimiz düzenlemeyi yapıp bizim için oluşturulan Delphi syntax’ını delphiye yazarak çalıştırabiliriz.