İletişim

JSON Nedir?

Kısa tanım

JSON (JavaScript Object Notation), veriyi anahtar-değer çiftleri ve diziler halinde düz metinle ifade eden, hem insanların okuyabildiği hem de programların kolayca ayrıştırabildiği bir veri değişim biçimidir. JavaScript sözdiziminden türemiştir ama dilden bağımsızdır; neredeyse her programlama dili JSON okuyup yazabilir. Web API'lerinin, webhook'ların ve yapılandırma dosyalarının en yaygın veri biçimidir; RFC 8259 ve ECMA-404 ile standartlaştırılmıştır.

Diğer adları: JavaScript Object Notation, JSON formatı, application/json, JSON dosyası

Bir JSON örneğini ve onu oluşturan nesne, dizi ile metin, sayı ve mantıksal değer türlerini gösteren diyagram

Sözdizimi: altı değer türü

JSON'da bir değer yalnızca şunlardan biri olabilir: nesne (süslü parantez içinde anahtar-değer çiftleri), dizi (köşeli parantez içinde sıralı liste), metin (string), sayı, true/false ve null. Bunlar iç içe geçebilir; karmaşık her yapı bu altı parçadan kurulur.

{
  "siparisNo": "SP-2026-1042",
  "musteri": { "ad": "Ayşe Yılmaz", "kurumsal": false },
  "kalemler": [
    { "sku": "KHV-250", "adet": 2, "birimFiyat": 349.9 },
    { "sku": "DGR-01", "adet": 1, "birimFiyat": 1899 }
  ],
  "kargoNotu": null,
  "olusturulma": "2026-10-03T09:15:00+03:00"
}

RFC 8259'a göre sistemler arasında taşınan JSON metni UTF-8 ile kodlanmalıdır; HTTP üzerindeki medya türü application/json'dır.

Ayrıştırıcıyı kıran küçük hatalar

JSON, JavaScript nesne yazımına benzediği için en sık hatalar da o benzerlikten doğar. Aşağıdakilerin hepsi JavaScript'te geçerli, JSON'da geçersizdir:

  • Anahtarları tırnaksız yazmak ({ ad: "Ayşe" }) ya da tek tırnak kullanmak.
  • Son öğeden sonra virgül bırakmak ([1, 2, 3,]).
  • Yorum satırı eklemek. Standart JSON yorum desteklemez; bazı araçların yapılandırma dosyalarında kabul ettiği yorumlu biçim (JSONC gibi) ayrı bir uzantıdır.
  • undefined, NaN, Infinity veya fonksiyon kullanmak.

Sayılar, tarihler ve diğer tuzaklar

Büyük tam sayılar: JSON standardı sayılara bir üst sınır koymaz, ama JavaScript dahil pek çok ortam sayıları 64 bit kayan nokta olarak okur ve 2^53'ten büyük tam sayılarda hassasiyet kaybolur. RFC 8259 da birlikte çalışabilirlik için bu aralığın dışına çıkılmamasını önerir.

JSON.parse('{"id": 9007199254740993}').id
// 9007199254740992  (son hane sessizce değişti)

Bu yüzden veritabanından gelen büyük kimlikler ve para tutarları çoğu API'de metin olarak gönderilir.

Tarihler: JSON'da tarih türü yoktur. En güvenli yol, saat dilimini de içeren ISO 8601 biçiminde bir metin göndermektir (yukarıdaki olusturulma alanı gibi). "03.10.2026" gibi yerel biçimler alıcı tarafta yanlış yorumlanmaya açıktır.

Tekrarlanan anahtarlar: Aynı nesnede iki kez "fiyat" anahtarı bulunursa hangisinin geçerli olacağı ayrıştırıcıya göre değişir. Bu belirsizlik güvenlik kontrollerinde de sorun çıkarabileceğinden üretilen JSON'da tekrarlı anahtar olmamalıdır.

JavaScript'te okumak ve yazmak

const metin = JSON.stringify({ ad: "Ayşe", puan: 4.5 });
// '{"ad":"Ayşe","puan":4.5}'

try {
  const veri = JSON.parse(gelenMetin);
} catch (hata) {
  // Geçersiz JSON: isteği 400 ile reddedin, uygulamayı çökertmeyin
}

Dışarıdan gelen metni asla eval ile çalıştırmayın; JSON.parse yalnızca veri üretir, kod çalıştırmaz. Ayrıştırma başarılı olsa bile verinin beklenen yapıda olduğu ayrıca doğrulanmalıdır. JSON Schema bu iş için yaygın kullanılan bir sözleşme biçimidir ve REST API belgelerinde (OpenAPI) de aynı mantık kullanılır.

JSON ile JSON-LD aynı şey mi?

Hayır. JSON-LD, JSON sözdizimini kullanan ama ona anlam katmanı ekleyen bir W3C standardıdır. @context ve @type gibi özel anahtarlar, verideki “name” alanının hangi sözlükte tanımlı hangi kavrama karşılık geldiğini belirtir. Her JSON-LD belgesi geçerli bir JSON'dur, ama sıradan bir JSON nesnesi bir arama motoruna hiçbir şey anlatmaz. Web sitelerinde Schema.org sözlüğüyle yazılan yapılandırılmış veri bu yüzden düz JSON değil, JSON-LD olarak eklenir.

Düz JSON'ın asıl alanı uygulamalar arası veri taşımaktır: API istek ve yanıtları, webhook gövdeleri, package.json gibi yapılandırma dosyaları ve PostgreSQL'in jsonb sütunları ya da belge tabanlı NoSQL veritabanları.

İlgili terimler

← Sözlüğe dön