Skip to main content

JSON’a Giriş

Giriş

JSON (JavaScript Object Notation), veri paylaşımı için kullanılan bir formattır.
Adından da anlaşılacağı üzere kökeni JavaScript’tir, ama bugünlerde Python, Ruby, PHP, Java gibi birçok dil tarafından da desteklenir.

JSON okunabilir, hafif bir formata sahiptir ve XML’e göre çok daha az formatlama gerektirir.
Bu rehberde JSON dosyalarında hangi verilerin kullanılabileceğini,
ayrıca bu formatın genel yapısı ve sözdizimini (syntax) ele alacağız.

Sözdizimi (Syntax) ve Yapıyı Anlamak

JSON dosyaları genelde .json uzantısıyla kaydedilir.
Ama başka formatların (örneğin .html) içinde de kullanılabilir:

  • Tırnak içinde JSON string olarak,
  • veya bir değişkene atanmış JSON nesnesi şeklinde.

Bu format özellikle web sunucusu ile istemci (tarayıcı) arasında veri iletimi için kullanılır.

Bir JSON nesnesi, verileri anahtar : değer (key : value) formatında saklar
ve genelde süslü parantezler {} içinde yazılır.

JSON nesneleri çoğunlukla .json dosyalarında karşımıza çıkar,
ama aynı zamanda bir program içinde JSON nesnesi veya string olarak da bulunabilir.

İşte basit bir JSON nesnesi örneği:

{
"ad" : "Ali",
"soyad" : "Keskin",
"ulke" : "Türkiye",
"online" : true,
"followers" : 456
}

Bu sadece kısa bir örnek olsa da, JSON aslında onlarca satır sürebilir.
Ama temel mantık hep aynı: Veri yapısı iki süslü parantez { } ile başlar ve biter,
ortasında ise anahtar : değer (key : value) çiftleri bulunur.

JSON’da kullanılan verilerin büyük çoğunluğu genelde bir JSON nesnesi içinde tutulur.

JSON’da anahtar (key) ve değer (value) arasında iki nokta üst üste : bulunur.
Her anahtar-değer çifti birbirinden virgül ( , ) ile ayrılır.

Örnek yapı şu şekilde görünür:

"ad" : "Ali",

JSON’da anahtarlar (keys) iki nokta üst üste : işaretinin sol tarafında yer alır.
Her anahtar çift tırnak içinde yazılmalıdır, örneğin "anahtar".
Anahtarlar geçerli bir string olabilir ama her nesne içinde benzersiz olmalıdır.

Anahtar isimlerinde boşluk kullanılabilir ("ad soyad" gibi),
ama bu durumda programlarken erişim zorlaşır.
Bu yüzden genelde alt çizgi kullanmak daha pratiktir: "ad_soyad".

JSON’daki değerler (values) iki nokta üst üste : işaretinin sağ tarafında yer alır.
Temel seviyede, bir JSON değeri şu altı veri tipinden biri olabilir:

  • String (metin)
  • Number (sayı)
  • Object (nesne)
  • Array (dizi)
  • Boolean (true veya false)
  • null (boş değer)

Daha geniş bakarsak, JSON değerleri sadece basit tiplerden oluşmaz;
JSON nesnesi veya dizi (array) gibi daha karmaşık yapılardan da oluşabilir.
Bunları bir sonraki bölümde detaylı göreceğiz.

Her veri tipi kendi sözdizimini korur:

  • String değerler tırnak içinde yazılırken "örnek",
  • Number değerler direkt yazılır 25.

.json dosyalarında veriler genelde birden fazla satıra yayılır.
Ama aynı içerik tek satırda da yazılabilir. Örneğin:

{"ad":"Ali","soyad":"Keskin","yas":25}

JSON’un tek satırda yazılmış halini genelde başka dosya tiplerinde
veya bir JSON string olarak görürüz.

Özellikle de büyük veri kümeleriyle çalışırken JSON’u birden fazla satıra yaymak çok daha okunabilir hale getirir,

JSON, elemanlar arasındaki boşlukları dikkate almadığı için,
iki nokta üst üste : ve anahtar-değer çiftlerini boşluklarla ayırarak
veriyi insanlar için daha anlaşılır hale getirebilirsin.

{ 
"ad" : "Ali",
"soyad" : "Keskin",
"online" : true
}

Şunu unutmamak lazım: JSON nesneleri görünüşte JavaScript objelerine benzer,
ama aynı şey değiller.

  • JavaScript objelerinde fonksiyon tanımlayıp kullanabilirsin.
  • Ama JSON’da fonksiyonlar değer olarak kullanılamaz.

JSON’un en önemli özelliği, veriyi öyle bir formatta tutmasıdır ki
farklı programlama dilleri arasında kolayca taşınabilir ve hepsiyle uyumlu çalışır.
Buna karşılık, JavaScript objeleri yalnızca JavaScript dili içinde kullanılabilir.

JSON yapıları bazen oldukça karmaşık hale gelebilir.
Bunun sebebi de içinde iç içe (nested) nesneler ve diziler (arrays) barındırabilmesidir.

Bir sonraki bölümde bu daha karmaşık JSON yapıları hakkında detaylı bilgi öğreneceksin.


JSON’da Karmaşık Yapılarla Çalışmak

JSON, sadece basit verileri değil, aynı zamanda iç içe geçmiş nesneler
ve diziler (arrays) de saklayabilir.

Bu nesne ve diziler de tıpkı diğerleri gibi anahtarlara atanmış değerler olarak tutulur
ve kendi içlerinde de anahtar-değer çiftleri barındırabilirler.

İç İçe Nesneler (Nested Objects)

Aşağıdaki users.json dosyasında her bir kullanıcı ("ahmet", "ayşe", "mehmet", "zeynep")
için bir nested JSON object bulunuyor.
Bu nesnelerin içinde de her kullanıcıya ait "username" ve "location" bilgileri var.

Her kullanıcı girdisi aslında birer iç içe JSON nesnesi örneği:

{
"ahmet": {
"username": "ahmet",
"location": "İstanbul"
},
"ayse": {
"username": "ayse",
"location": "Ankara"
},
"mehmet": {
"username": "mehmet",
"location": "İzmir"
},
"zeynep": {
"username": "zeynep",
"location": "Bursa"
}
}

Bu örnekte süslü parantezler { } kullanılarak, her bir kullanıcı için
username ve location bilgilerini içeren iç içe JSON nesneleri oluşturuldu.

Diğer JSON yapılarında olduğu gibi, burada da elemanlar virgül ( , ) ile ayrılıyor.

İç İçe Diziler (Nested Arrays)

JSON formatında veriler dizi (array) yapılarıyla da iç içe tutulabilir.
Diziler köşeli parantezler [ ] içinde yazılır, sıralı bir koleksiyon oluşturur
ve farklı veri tiplerini bir arada barındırabilir.

Örneğin, bir kullanıcının farklı web siteleri veya sosyal medya profilleri varsa,
bunları tek bir dizi içinde gruplamak mantıklı olur.

Aşağıda "ahmet" adlı bir kullanıcı için basit bir nested array örneği:

{ 
"first_name" : "Ahmet",
"last_name" : "Yılmaz",
"location" : "İstanbul",
"websites" : [
{
"description" : "kişisel site",
"URL" : "https://ahmetyilmaz.com"
},
{
"description" : "blog",
"URL" : "https://ahmetyilmaz.com/blog"
}
],
"social_media" : [
{
"description" : "twitter",
"link" : "https://twitter.com/ahmetyilmaz"
},
{
"description" : "facebook",
"link" : "https://facebook.com/ahmetyilmaz"
},
{
"description" : "github",
"link" : "https://github.com/ahmetyilmaz"
}
]
}

Buradaki "websites" ve "social_media" anahtarları, Ahmet’e ait
iki web sitesi ve üç sosyal medya profilini saklamak için dizi (array) yapısını kullanıyor.
Bunların dizi olduğunu da köşeli parantezlerden [ ] anlayabilirsin.

JSON’da iç içe (nested) yapılar kullanmak, daha karmaşık ve hiyerarşik verilerle
daha düzenli çalışmanı sağlar.


JSON ve XML Karşılaştırması

XML (eXtensible Markup Language), hem insanlar hem makineler tarafından okunabilen
veri saklama yöntemlerinden biridir ve birçok programlama dilinde kullanılabilir.

Aslında XML, birçok yönden JSON’a benzer ama:

  • Çok daha fazla yazım gerektirir, yani okumak ve yazmak daha uzun sürer.
  • XML dosyaları mutlaka özel bir XML parser ile ayrıştırılır,
    JSON ise standart bir fonksiyonla kolayca işlenebilir.
  • JSON dizileri (arrays) desteklerken, XML dizileri desteklemez.

Aşağıda basit bir XML formatı örneği görebilirsin:

<kullanicilar>
<kullanici>
<kullanici_adi>Ahmet</kullanici_adi>
<konum>Marmara Denizi</konum>
</kullanici>
<kullanici>
<kullanici_adi>Ayse</kullanici_adi>
<konum>Ege Denizi</konum>
</kullanici>
<kullanici>
<kullanici_adi>Mehmet</kullanici_adi>
<konum>Karadeniz</konum>
</kullanici>
<kullanici>
<kullanici_adi>Zeynep</kullanici_adi>
<konum>Akdeniz</konum>
</kullanici>
</kullanicilar>

Şimdi aynı veriyi JSON formatında karşılaştıralım:

{
"kullanicilar": [
{
"kullanici_adi": "Ahmet",
"konum": "Marmara Denizi"
},
{
"kullanici_adi": "Ayse",
"konum": "Ege Denizi"
},
{
"kullanici_adi": "Mehmet",
"konum": "Karadeniz"
},
{
"kullanici_adi": "Zeynep",
"konum": "Akdeniz"
}
]
}

JSON, XML’e göre çok daha kompakt bir yapıya sahiptir ve bitiş etiketleri gerektirmez.
Ayrıca JSON örneğinde gördüğün gibi diziler (arrays) kullanılabilirken, XML’de bu mümkün değildir
(köşeli parantez [ ] ile anlaşılır).

HTML’e aşinaysan, XML’in etiket yapısının HTML’e benzediğini fark etmişsindir.
JSON ise daha hafif, daha az ayrıntılı ve özellikle AJAX uygulamaları gibi senaryolarda daha hızlıdır.

Ama hangi formatı kullanacağına karar vermeden önce, mutlaka projenin ihtiyaçlarını göz önünde bulundurmalısın.


Sonuç

JSON, verileri paylaşmak, saklamak ve işlemek için kullanılan hafif bir formattır.
Bugün neredeyse tüm popüler dillerde destekleniyor ve özellikle API’lerde (ör. Twitter API) yaygın olarak tercih ediliyor.
JavaScript ile doğal uyumlu olması da onu daha kullanışlı hale getiriyor.

Genelde kendi .json dosyalarını sıfırdan yazmak yerine, başka kaynaklardan elde edeceksin.
Bu yüzden JSON’un yapısından çok, onu programlarında nasıl kullanabileceğine odaklanmalısın.

Örneğin:

  • CSV veya tablo verilerini JSON’a dönüştürmek için Mr. Data Converter gibi açık kaynak araçları kullanabilirsin.
  • XML ↔ JSON dönüşümü için utilities-online.info işini görebilir.
  • JSON’un doğru olup olmadığını kontrol etmek için JSONLint,
    web ortamında test etmek içinse JSFiddle gibi araçlardan faydalanabilirsin.

Kısacası JSON, veriyle çalışan herkes için basit ama güçlü bir standarttır.