JSON Nedir? Veri Formatı ve Kullanım Rehberi

JSON, verileri anahtar-değer çiftleriyle taşıyan sade bir format. Sözdizimini, API kullanımını ve güvenlik kurallarını örneklerle anlatan pratik bir rehber.

Programlar
JSON Nedir? Veri Formatı ve Kullanım Rehberi

JSON'u ilk kez gördüğünüzde süslü parantezler, tırnaklar ve iki nokta üst üste işaretleri biraz karmaşık görünebilir. Ama bu görüntü yanıltıcı, çünkü JSON yazılım dünyasının en sade veri formatlarından biridir. Bir API'den veri çekerken, bir yapılandırma dosyasını düzenlerken ya da bir betikte ayar tutarken sürekli karşınıza çıkar. Bu rehberde JSON'un ne olduğunu, nasıl yazıldığını ve nerede işinize yarayacağını pratik örneklerle ele alıyoruz.

JSON Nedir, Nereden Geliyor

JSON, İngilizce "JavaScript Object Notation" ifadesinin kısaltmasıdır ve JavaScript kökenli bir format olarak doğmuştur. Bugün ise JavaScript ile sınırlı değildir; Python, PHP, Java, C# ve Go gibi hemen her dilde yerleşik destek görür. Bir geliştirici JSON dosyasına baktığında içeriğini saniyeler içinde çözebilir, çünkü format düz metindir ve yapısı nettir.

Bu okunabilirlik tesadüf değildir. JSON, XML gibi öncüllerine göre çok daha az karakter kullanır, kapanış etiketi gerektirmez ve gereksiz yük taşımaz. Douglas Crockford'un 2000'lerin başında popülerleştirdiği bu format, kısa sürede web'in fiilî veri standardı hâline gelmiştir.

Sözdizimini ayrıntılı öğrenmek isteyenler için MDN'nin JSON dokümantasyonu iyi bir başlangıç noktasıdır: MDN JSON rehberi. Format, resmî olarak ECMA-404 standardıyla tanımlanır; yani belirli bir şirkete veya programlama diline bağlı değildir. Bu bağımsızlık, JSON'un diller arasında taşınabilir olmasının temel sebebidir.

Sözdizimi: Anahtar-Değer Mantığı

JSON'da her veri anahtar-değer çiftine dayanır. Önce anahtar çift tırnak içinde yazılır, ardından iki nokta üst üste ve değer gelir. Bu çiftler süslü parantez içine alınınca bir "nesne" oluşur.

JSON nesne ve dizi sözdizimini gösteren kod editörü penceresi
{
  "isim": "Ahmet",
  "yas": 32,
  "aktif": true,
  "sehir": null
}

Değer türleri sınırlıdır ama günlük kullanım için yeterlidir. Metin (string), sayı, boolean (true/false) ve null bu türlerin başında gelir. Bunlara ek olarak iki yapısal tür daha bulunur: nesne ve dizi. Dizi, köşeli parantez içinde sıralı değerleri tutar.

{
  "kullanicilar": ["Ahmet", "Zeynep", "Mert"],
  "adres": {
    "il": "İstanbul",
    "ilce": "Kadıköy"
  }
}

Nesneler iç içe geçebilir ve diziler nesne barındırabilir. Bu iç içe geçme özelliği sayesinde JSON, tek bir kullanıcı kaydından koca bir ürün kataloğuna kadar her ölçekte veri taşıyabilir. Anahtarların her zaman çift tırnak içinde yazılması gerekir; tek tırnaklı veya tırnaksız anahtar JSON'da geçersizdir ve bu, JavaScript nesne yazımıyla en sık karıştırılan hatalardan biridir.

Sayılar da kendine özgü kurallara bağlıdır. Baştaki sıfırlar geçersizdir. Ondalık ayracı her zaman nokta olmalıdır, virgül kullanılamaz. Bu kurallar küçük ayrıntılar gibi görünse de, farklı sistemler arasında veri taşırken hataların en sık çıktığı noktalardır.

Nerelerde Karşınıza Çıkar

Web API'leri, JSON'un en yaygın kullanım alanıdır. Bir uygulama sunucudan veri istediğinde yanıt neredeyse her zaman JSON formatında döner.

curl https://api.example.com/users/1
{
  "id": 1,
  "name": "Ahmet Yılmaz",
  "email": "[email protected]"
}

Yapılandırma dosyaları ikinci büyük kullanım alanıdır. package.json, VS Code ayar dosyaları ve pek çok komut satırı aracının config dosyası JSON tutar. Okunabilir ve düzenlemesi kolay olduğu için ayar dosyası olarak sıkça tercih edilir.

Bazı veritabanları da veriyi doğrudan JSON'a yakın bir formatta saklar; MongoDB gibi doküman tabanlı sistemler buna iyi bir örnektir. Mobil uygulamalar sunucuyla JSON üzerinden konuşur, veri aktarma ve içe aktarma araçları da genelde JSON'u destekler.

Log dosyalarını yapılandırılmış biçimde tutmak isteyen sistemler artık düz metin yerine JSON satırları kullanmayı tercih ediyor. Her satırın bağımsız bir JSON nesnesi olması, logları programatik olarak filtrelemeyi ve arama araçlarına aktarmayı kolaylaştırır. Bu yaklaşım, özellikle çok sayıda sunucudan log toplayan sistemlerde yaygınlaşmıştır.

Ayrıştırma ve Serileştirme

JSON ile pratikte iki işlem yapılır: ayrıştırma (parse) ve serileştirme (serialize). Ayrıştırma, JSON metnini programın veri yapısına çevirir; serileştirme ise tam tersini yapar. Bu iki işlem, JSON'u veri alışverişinde kullanışlı kılan asıl mekanizmadır.

JSON verisinin ayrıştırma ve serileştirme akışını gösteren şema

Python'da bu iki işlem tek satırla yapılır:

import json

veri = json.loads('{"isim": "Ahmet", "yas": 32}')
print(veri["isim"])

metin = json.dumps({"isim": "Ahmet", "yas": 32})

JavaScript'te de aynı mantık işler:

const veri = JSON.parse('{"isim": "Ahmet"}');
const metin = JSON.stringify({ isim: "Ahmet" });

Dış kaynaktan gelen JSON'u işlemeden önce doğrulamak gerekir, çünkü beklenmedik bir yapı programı çökertebilir. JSON Schema gibi araçlar, gelen verinin beklenen alanları içerip içermediğini kontrol etmenizi sağlar. Büyük projelerde bu doğrulama katmanı genellikle API sınırında, veri işlenmeye başlamadan önce çalıştırılır.

Güçlü ve Zayıf Yanları

JSON'un asıl gücü sadeliğinde yatar. Öğrenme eğrisi neredeyse yoktur, sözdizimi minimaldir ve gereksiz karmaşıklık taşımaz. Dilden bağımsız olması da ayrı bir avantajdır: Python'da yazılmış bir sunucu, JavaScript tabanlı bir istemciyle sorunsuz veri alışverişi yapabilir.

Terminalde jq komutuyla JSON verisi filtreleme ekranı

Kompaktlık da göz ardı edilmemelidir. JSON, verileri nispeten az yer kaplayan biçimde temsil eder ve bu, ağ üzerinden aktarımı hızlandırır. Büyük API yanıtlarında bu fark gerçekten hissedilir; binlerce kayıt döndüren bir uç noktada JSON'un derli toplu yapısı işlem süresine de yansır.

Ama JSON her işe uygun değildir. Yorum satırı desteklemez ve tarih türü yoktur; tarihler string olarak taşınmak zorundadır. Büyük ikili verileri, örneğin resim ya da ses dosyalarını doğrudan taşıyamaz; bunlar için base64 kodlama ya da ayrı bir dosya referansı gerekir.

ÖzellikJSONXML
OkunabilirlikYüksekOrta
Dosya boyutuKüçükBüyük
Yorum desteğiYokVar
Şema doğrulamaJSON SchemaXSD
Yaygın kullanımWeb API, configKurumsal belgeler

Güvenlik ve Pratik Kullanım

Kullanıcıdan veya güvenilmeyen bir API'den gelen JSON'u hiçbir zaman doğrudan işlemeyin. Beklenen alan eksikse, tür uyuşmazlığı varsa ya da veri kötü niyetli biçimde büyütülmüşse (örneğin aşırı derin iç içe geçmeyle), uygulama çökebilir veya istismar edilebilir.

Modern diller JSON.parse gibi güvenli ayrıştırıcılar sunar. Eski eval() tabanlı yöntemlerden kaçının, çünkü bu yöntem gelen metni doğrudan kod olarak çalıştırabilir. Şema doğrulama katmanı eklemek, yani gelen verinin tür ve zorunlu alanlarını kontrol etmek, üretim sistemlerinde artık neredeyse standart bir uygulamadır.

Basit bir doğrulama örneği şöyle yazılabilir:

function kullaniciMi(veri) {
  return typeof veri.id === "number" && typeof veri.name === "string";
}

Boyut sınırı koymak da ihmal edilmemelidir. Sunucuya gelen JSON gövdesine bir üst limit konmazsa, kötü niyetli bir istemci devasa bir gövde göndererek belleği tüketebilir. Çoğu web çerçevesi bu limiti varsayılan olarak ayarlar, ama değeri kontrol etmekte fayda vardır.

Terminalde JSON ile Çalışmak

JSON dosyalarını düzenlerken sözdizimi hatalarını yakalamak için bir doğrulayıcı kullanmak zaman kazandırır; çoğu kod editörü zaten anlık hata gösterir. Tırnak unutmak ve sondaki virgülü fazladan bırakmak en sık yapılan hatalar arasındadır; JSON'da sondaki virgül geçersizdir.

Büyük JSON dosyalarıyla çalışırken terminalde jq aracı işi kolaylaştırır.

cat data.json | jq '.kullanicilar[0].isim'

Bu komut, JSON dosyasındaki ilk kullanıcının ismini filtreleyip ekrana basar. jq, API yanıtlarını hızlıca incelemek veya betiklerde JSON'dan belirli alanları çekmek için terminalde gerçekten kullanışlı bir araçtır. Aynı işi bir betik içinde tekrarlamak yerine, tek satırlık bir komutla sonuca ulaşabilirsiniz.

Aşağıdaki adımlar, JSON ile ilk çalışırken hataları azaltır:

  • Anahtarları her zaman çift tırnak içinde yazın.
  • Son elemandan sonra virgül bırakmayın.
  • Sayı ve boolean değerlerini tırnaksız yazın.
  • Büyük dosyalarda jq veya benzer bir araçla filtreleme yapın.
  • Dış kaynaktan gelen veriyi işlemeden önce doğrulayın.

JSON'un öğrenme maliyeti düşüktür ama getirisi yüksektir. Sözdizimini ve iki temel işlemi bir kez kavradığınızda, bu bilgi neredeyse her dilde ve her projede aynı şekilde işler. Bu taşınabilirlik, JSON'u öğrenmeye harcanan zamanı özellikle değerli kılar.

Web geliştirmeden mobil uygulamalara, konfigürasyon yönetiminden veri aktarımına kadar pek çok alanda aynı bilgiyi tekrar tekrar kullanırsınız. Yeni bir dil veya çerçeve öğrenirken bile JSON kısmını atlayabilirsiniz, çünkü format zaten tanıdıktır. Format basittir ama kapsadığı alan geniştir; bu yüzden öğrenmeye harcanan birkaç saat, uzun vadede kat kat geri döner.

Kaynaklar ve doğrulama

Bilgileri uygulamadan önce güncel ayrıntıları aşağıdaki birincil veya alan otoritesi kaynaklardan kontrol edin.

Celil Uyanikoglu

Yazan Celil Uyanikoglu

25 yıldır bilgi işlem piyasasında farklı dallarda uzmanlaşan bir Bilgisayar Mühendisi

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar