BurtiNETBlog
Teknoloji

JSON Nedir ve Ne İçin Kullanılır? Örneklerle JSON Rehberi

bnet5 dk okuma
JSON Nedir ve Ne İçin Kullanılır? Örneklerle JSON Rehberi
İçindekiler

Bir web sitesinin hava durumu verisini çekmesi, bir mobil uygulamanın sunucuyla konuşması ya da bir yazılımın ayar dosyasını okuması… Bu işlerin çoğunun arkasında JSON adlı küçük ve sade bir veri formatı vardır. Okunması insan için kolay, işlenmesi makine için hızlıdır; bu yüzden bugün web API'lerinin fiili standardı haline gelmiştir. Bu rehberde JSON'un ne olduğunu, söz dizimini, nerelerde kullanıldığını ve en sık yapılan hataları örneklerle anlatıyoruz.

JSON Nedir?

JSON (JavaScript Object Notation), verileri metin tabanlı, anahtar-değer çiftleri halinde ifade eden hafif bir veri değişim formatıdır. Adında JavaScript geçse de dilden bağımsızdır; PHP, Python, Java, C#, Go gibi hemen her programlama dili JSON'u okuyup yazabilir. JSON'un resmi MIME türü application/json'dır ve dosya uzantısı .json'dır.

Format, Douglas Crockford tarafından popülerleştirilmiş ve bugün RFC 8259 ile standartlaştırılmıştır. Basit bir JSON nesnesi şöyle görünür:

{
  "ad": "Ayşe",
  "yas": 29,
  "uye": true,
  "diller": ["Türkçe", "İngilizce"],
  "adres": { "sehir": "İstanbul", "posta_kodu": "34000" }
}
Renkli sözdizimi vurgulamalı kod satırlarıyla dolu bilgisayar monitörü
API yanıtlarının büyük bölümü bugün JSON formatında döner · Fotoğraf: Markus Spiske / CC0 / Wikimedia Commons

JSON Söz Dizimi Kuralları

JSON'un kuralları azdır ama katıdır; tek bir yanlış karakter dosyanın tamamının okunamamasına yol açar. Temel kurallar şunlardır:

  • Veri, anahtar: değer çiftleri halinde yazılır ve anahtarlar çift tırnak içinde olmalıdır.
  • Çiftler virgülle ayrılır; son öğeden sonra virgül konmaz.
  • Nesneler süslü parantezle { }, diziler köşeli parantezle [ ] gösterilir.
  • Metinler yalnızca çift tırnakla yazılır; tek tırnak geçersizdir.
  • JSON'da yorum satırı (// ya da /* */) yoktur.

JSON Veri Türleri

JSON altı temel veri türünü destekler. Tarih gibi türlerin ayrı bir karşılığı yoktur; tarihler genellikle metin olarak (ör. ISO 8601 biçimi) yazılır.

TürAçıklamaÖrnek
String (metin)Çift tırnak içindeki karakter dizisi"merhaba"
Number (sayı)Tam veya ondalıklı sayı, tırnaksız42, 3.14
BooleanMantıksal doğru/yanlıştrue, false
NullBoş (değer yok)null
Object (nesne)Anahtar-değer çiftleri koleksiyonu{ "ad": "Ali" }
Array (dizi)Sıralı değer listesi[1, 2, 3]

JSON Ne İçin Kullanılır?

JSON, iki sistemin veri alışverişi yapması gereken hemen her yerde kullanılır. Başlıca kullanım alanları şunlardır:

  • Web API'leri: REST API'ler istek ve yanıtlarını çoğunlukla JSON ile taşır.
  • Mobil uygulamalar: Uygulama ile sunucu arasındaki veri trafiği JSON üzerinden akar.
  • Yapılandırma dosyaları: package.json, composer.json, tsconfig.json gibi dosyalar proje ayarlarını JSON ile tutar.
  • NoSQL veritabanları: MongoDB gibi veritabanları kayıtları JSON benzeri belgeler olarak saklar.
  • Yapılandırılmış veri (SEO): Arama motorlarına sayfa bilgisi sunan JSON-LD işaretlemesi de JSON söz dizimini kullanır.

JSON ile XML Arasındaki Farklar

JSON'dan önce veri değişiminde XML yaygındı ve hâlâ birçok eski sistemde kullanılır. İkisi de verileri metin olarak taşır ama yaklaşımları farklıdır:

ÖzellikJSONXML
Söz dizimiKısa, süslü parantez ve köşeli parantezAçılış ve kapanış etiketleri; daha uzun
OkunabilirlikSade ve okunması kolayEtiketler nedeniyle kalabalık
Dosya boyutuGenellikle daha küçükGenellikle daha büyük
Veri türleriSayı, mantıksal, null gibi türleri doğrudan desteklerHer şey metindir; tür belirtmek için şema gerekir
Dizi desteğiDoğrudan dizi türü vardırTekrarlayan etiketlerle taklit edilir
Yorum satırıDesteklenmezDesteklenir
Kullanım alanıWeb API'leri, mobil uygulamalarKurumsal sistemler, SOAP, belge formatları
Masaüstü bilgisayar ekranında kod yazan yazılımcı
JSON, yazılımcıların en sık okuduğu ve yazdığı veri formatlarından biridir · Fotoğraf: Lee Campbell / CC0 / Wikimedia Commons

JavaScript ve PHP'de JSON Kullanımı

Programlama dillerinde JSON metnini nesneye çevirmek (ayrıştırma) ve nesneyi JSON metnine çevirmek (serileştirme) için hazır fonksiyonlar bulunur.

JavaScript'te JSON

JavaScript'te JSON.parse() metni nesneye, JSON.stringify() nesneyi metne çevirir:

const metin = '{"ad":"Ayşe","yas":29}';
const nesne = JSON.parse(metin);
console.log(nesne.ad); // Ayşe

const geri = JSON.stringify(nesne);

PHP'de JSON

PHP'de aynı işi json_decode() ve json_encode() yapar. json_decode'a ikinci parametre olarak true verirseniz sonuç ilişkisel dizi olarak döner:

$metin = '{"ad":"Ayşe","yas":29}';
$veri = json_decode($metin, true);
echo $veri['ad']; // Ayşe

echo json_encode($veri, JSON_UNESCAPED_UNICODE);

JSON_UNESCAPED_UNICODE bayrağı Türkçe karakterlerin \u00fc gibi kaçış dizileri yerine olduğu gibi yazılmasını sağlar.

En Sık Yapılan JSON Hataları

JSON ayrıştırıcıları hataya hoşgörüsüzdür; aşağıdaki sorunlar "Unexpected token" ya da "Syntax error" mesajlarının başlıca sebebidir:

HataYanlış ÖrnekDoğrusu
Son öğeden sonra virgül{ "a": 1, }{ "a": 1 }
Tek tırnak kullanımı{ 'a': 1 }{ "a": 1 }
Anahtarın tırnaksız yazılması{ a: 1 }{ "a": 1 }
Yorum eklemek{ "a": 1 } // notYorumu kaldırın
Metin içinde kaçışsız çift tırnak"Ali "dedi"""Ali \"dedi\""
Dosyada BOM veya gizli karakterUTF-8 BOM'lu dosyaBOM'suz UTF-8 kaydedin

JSON'unuzdan emin olamıyorsanız çevrimiçi bir JSON doğrulayıcıyla (validator) ya da editörünüzün JSON biçimlendirme özelliğiyle kontrol edin. Komut satırında python3 -m json.tool dosya.json komutu da hem doğrular hem biçimlendirir.

JSON Kullanırken Güvenlik ve Performans İpuçları

  • Dışarıdan gelen JSON'u asla eval() ile çalıştırmayın; her zaman JSON.parse() gibi güvenli ayrıştırıcıları kullanın.
  • Gelen veriyi doğrulayın: beklediğiniz alanların varlığını ve türünü kontrol etmeden kullanmayın.
  • API yanıtlarını sunucuda gzip veya Brotli ile sıkıştırın; JSON metin olduğu için iyi sıkışır.
  • Çok büyük veri kümelerinde tüm JSON'u belleğe almak yerine sayfalama (pagination) veya akış (streaming) kullanın.
  • Hassas verileri (şifre, anahtar) API yanıtına koymayın; JSON'un okunabilir olması, herkese açık olduğu anlamına gelir.

Gerçek Bir API Yanıtı Nasıl Görünür?

Bir JSON yanıtı genellikle iç içe nesnelerden ve dizilerden oluşur. Aşağıdaki örnek, bir blog API'sinin makale listesi döndürdüğü yanıtı gösterir:

{
  "toplam": 2,
  "sayfa": 1,
  "yazilar": [
    {
      "id": 101,
      "baslik": "JSON Nedir?",
      "etiketler": ["json", "api"],
      "yayinda": true,
      "yazar": { "ad": "Mehmet", "id": 7 }
    },
    {
      "id": 102,
      "baslik": "RPC Nedir?",
      "etiketler": ["rpc"],
      "yayinda": false,
      "yazar": null
    }
  ]
}

Bu yanıtta yazilar bir dizidir, her öğesi bir nesnedir ve yazar alanı hem iç içe nesne hem de null olabilir. Yanıtı kullanan kod, null değeri için kontrol yapmalıdır; aksi halde "undefined" hataları oluşur.

JSON Schema ile Veriyi Doğrulamak

Dışarıdan aldığınız JSON'un beklediğiniz yapıda olduğundan emin olmak için JSON Schema kullanabilirsiniz. Şema, hangi alanların zorunlu olduğunu, türlerini ve değer sınırlarını tanımlar. Bu sayede hatalı veri, uygulamanın derinliklerine inmeden giriş noktasında yakalanır. API dokümantasyonu ve otomatik testlerde de şemalar sıkça kullanılır.

Sık Sorulan Sorular

JSON bir programlama dili midir?

Hayır. JSON bir programlama dili değil, veri biçimidir. İçinde mantık, döngü ya da fonksiyon barındırmaz; yalnızca veriyi tanımlar.

JSON ile JavaScript nesnesi aynı şey midir?

Benzerler ama aynı değildir. JSON katı bir metin biçimidir (anahtarlar çift tırnaklı, yorum yok); JavaScript nesneleri ise daha esnektir ve fonksiyon içerebilir.

JSON dosyası nasıl açılır?

JSON düz metin olduğu için herhangi bir metin editörüyle (Not Defteri, VS Code) açılabilir. Tarayıcılar ve kod editörleri JSON'u biçimlendirerek okunaklı gösterebilir.

JSON mu XML mi kullanmalıyım?

Yeni web API'leri ve mobil uygulamalar için çoğunlukla JSON tercih edilir; çünkü daha hafif ve basittir. XML, mevcut kurumsal sistemlerle veya SOAP gibi protokollerle çalışırken gerekir.

JSON-LD ile JSON aynı mı?

JSON-LD, JSON söz dizimini kullanan ve arama motorlarına yapılandırılmış veri sunan bir işaretleme biçimidir. Söz dizimi JSON'dur; farkı, schema.org gibi sözlüklere bağlanan @context ve @type alanlarını içermesidir.

İlgili yazılar