JSON Nedir? Modern Veri Formatına Pratik Giriş
JSON (JavaScript Object Notation), veri alışverişi için kullanılan hafif, okunabilir bir format. 2001'de Douglas Crockford tarafından popülerleşti. Bugün neredeyse tüm web servisleri API yanıtlarını JSON olarak döner. Neden bu kadar yaygın? Çünkü hem insan hem makine tarafından kolay anlaşılır. XML gibi ağır sözdizimlerine göre daha kısa. Python, JavaScript, Java, Go dilleri için yerleşik parser'lar mevcut.
JSON'ın temel yapı taşları dört ana veri türü üzerine kuruludur: string, number, object, array. Boolean ve null da desteklenir. Hiçbir yorum satırı yok. Tüm anahtarlar çift tırnak içinde olmak zorunda. Virgül kuralları katıdır. Eksik virgül syntax hatası fırlatır. Bu katılık, parser'ların hızlı çalışmasını sağlar. Hata ayıklama kolaylaşır.
{
"kullaniciId": 42,
"ad": "Ayşe Yılmaz",
"aktif": true,
"puan": 98.5,
"roller": ["admin", "editör"],
"profil": null
}
Yukarıdaki örnekte her alanın türü bellidir. String tırnakla, number tırnaksız, boolean küçük harfle yazılır. Object süslü parantez, array köşeli parantez içinde tanımlanır. İç içe yapılar kurulabilir. Derinlik sınırı yoktur. Çok büyük dosyalarda parse süresi artar. Bu nedenle gerçek zamanlı sistemlerde limit konur.
HTTP API'lerinde Content-Type: application/json header'ı standart hale geldi. RESTful tasarımların çoğu JSON kabul eder. GraphQL yanıtları da JSON şeması üzerine inşa edilmiştir. WebSocket mesajları sıkça JSON string olarak iletilir. Frontend ile backend arasında köprü görevi görür.
Python'da json modülü ile tek satırda dump/pars yapmak mümkün. JavaScript'te JSON.parse() ve JSON.stringify(). TypeScript için interface tanımları JSON şemasıyla eşleştirilebilir. TypeScript compile-time tip kontrolü sağlar. Runtime'da geçersiz yapıyı yakalar. Bu, büyük ekiplerde hata azaltır.
Güvenlik açısından JSON injection riskleri vardır. Kullanıcı girdisi doğrudan eval() içine verilmez. Her zaman parser kullanılır. XSS ve SQL injection koruması ayrıca sağlanmalı. JSON Web Token (JWT) imzalama sırasında özel dikkat gerekir. İmza doğrulama olmadan token kabul edilmez. Bu, kimlik sahteciliği riskini azaltır.
JSON Schema, yapının sözleşmesini tanımlar. Required alanlar, minimum/minimum uzunluk, enum listesi konabilir. API gateway'leri bu şemayı validate eder. Geçersiz yapı reddedilir. Bu, backend'in beklediği formata uymayan istekleri filtreler. Uyum kontrolü otomatikleşir.
Pratikte JSON dosyaları konfigürasyon formatı olarak da kullanılır. Docker Compose, webpack.config.js, package.json hepsi JSON tabanlıdır. YAML daha okunaklı olsa da JSON daha geniş desteklenir. Her iki format da yaygın. Sistemler her ikisini de kabul eder. Genellikle esneklik korunur.