İç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" }
}
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ür | Açıklama | Örnek |
|---|---|---|
| String (metin) | Çift tırnak içindeki karakter dizisi | "merhaba" |
| Number (sayı) | Tam veya ondalıklı sayı, tırnaksız | 42, 3.14 |
| Boolean | Mantıksal doğru/yanlış | true, false |
| Null | Boş (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.jsongibi 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:
| Özellik | JSON | XML |
|---|---|---|
| Söz dizimi | Kısa, süslü parantez ve köşeli parantez | Açılış ve kapanış etiketleri; daha uzun |
| Okunabilirlik | Sade ve okunması kolay | Etiketler nedeniyle kalabalık |
| Dosya boyutu | Genellikle daha küçük | Genellikle daha büyük |
| Veri türleri | Sayı, mantıksal, null gibi türleri doğrudan destekler | Her şey metindir; tür belirtmek için şema gerekir |
| Dizi desteği | Doğrudan dizi türü vardır | Tekrarlayan etiketlerle taklit edilir |
| Yorum satırı | Desteklenmez | Desteklenir |
| Kullanım alanı | Web API'leri, mobil uygulamalar | Kurumsal sistemler, SOAP, belge formatları |
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:
| Hata | Yanlış Örnek | Doğ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 } // not | Yorumu kaldırın |
| Metin içinde kaçışsız çift tırnak | "Ali "dedi"" | "Ali \"dedi\"" |
| Dosyada BOM veya gizli karakter | UTF-8 BOM'lu dosya | BOM'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 zamanJSON.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
Link Kısaltma Servisleri: Ücretsiz URL Kısaltma Araçları ve Kendi Kısaltıcınızı Kurmak
Uzun bağlantıları kısaltmak için hangi servisi seçmelisiniz? Link kısaltıcıların nasıl çalıştığını, popüler servisleri, güvenlik risklerini ve kendi alan adınızla YOURLS kurulumunu anlatıyoruz.
URL ile URI Arasındaki Fark Nedir? Örneklerle Açıklama
URI bir kaynağı tanımlayan genel kimliktir, URL ise o kaynağın nerede bulunacağını da söyleyen özel bir URI türüdür. URL, URI ve URN farkını örnekler ve tablolarla anlatıyoruz.
Resim Formatları Nelerdir? En Çok Kullanılan 20 Görsel ve Formatları
JPG, PNG, WebP, AVIF, HEIC, SVG, TIFF, RAW ve daha fazlası. En çok kullanılan 20 görsel formatını karşılaştırmalı tablolarla, hangi durumda hangisini kullanmanız gerektiğiyle anlatıyoruz.