Kısa cevap
JSON, nesne, dizi, metin, sayı ve temel değerlerle yapılandırılmış veri taşımaya yarayan metin biçimidir.
Nerede işine yarar?
Bir yanıtın makine tarafından ayrıştırılmasını kolaylaştırır; fakat alanların anlamı ayrıca belgelenmelidir. Geçerli JSON olması tek başına verinin doğru olduğu anlamına gelmez. Şema, kabul edilen alanları ve türleri açıklayabilir.
Tanımdan uygulamaya, kendi denemene.
Bir cümlede uygulaması
Bir terimi slug, ad, tanım, kaynak ve güncelleme tarihi alanlarıyla döndürmek.
Neyle karıştırılmamalı?
JSON veri biçimidir; API iletişim sözleşmesi, JSON-LD ise bağlantılı veri yaklaşımıdır.
Veri yolculuğa çıkıyor. Biçimi belli olsun.
Bir proje listesini web sitesiyle mobil uygulama arasında paylaşacağını düşün. Her projenin başlığı, kategorisi, kapağı ve yayın durumu var. Bunları ekrandaki HTML’den kazımak yerine açık alanlar halinde taşımak istiyorsun. JSON, bu değerleri metin olarak ifade etmek için kullanılabilir. Tasarımı veya iş mantığını taşımaz; farklı tarafların aynı veriyi okuyabileceği bir biçim sunar. Alanların ne anlama geldiğini ise senin sözleşmen belirler.
Örneğin başlık bir metin, yayımlandı alanı bir mantıksal değer, etiketler bir liste olabilir. Fiyatı bir yerde sayı, başka yerde para birimi eklenmiş metin olarak gönderirsen iki taraf aynı alanı farklı yorumlayabilir. Sıfır, boş metin, null ve alanın hiç bulunmaması da aynı şey değildir. Ürün ekranında bu farklar ücretsiz, bilinmiyor, girilmemiş veya uygulanamaz gibi farklı anlamlara dönüşebilir. Biçim geçerli olsa bile veri anlamı yanlış olabilir.
JSON’un JavaScript’e benzemesi bazen yanıltır. JSON metninde yorum veya fonksiyon yazamazsın; anahtarlar ve metin değerleri çift tırnakla ifade edilir. Sonda kalan virgül, sıradan bir nesne yazımında kabul edilse bile JSON ayrıştırmasında sorun çıkarabilir. Bu nedenle örnek dosyayı elle düzenlerken yalnız görünüşüne güvenmeyiz. İçeriği ayrıştırmak bir kontrol, beklenen alanlara ve türlere uyup uymadığını değerlendirmek başka bir kontroldür.
Veri sınırları uygulama tasarımına da yansır. Bir kimlik çok büyük bir tamsayıysa bazı istemcilerde sayı hassasiyeti kaybolabilir; kimliği metin olarak taşıma kararı bu nedenle gerekebilir. Tarih de JSON’da özel bir tarih türü değildir. Tarih metninin biçimini ve saat dilimini ayrıca tanımlamak gerekir. İki sistem aynı dosyayı okuyabiliyor olsa bile aynı anı veya aynı kimliği anladıkları varsayılmamalıdır.
Bir uygulamada JSON çıktısını insanlar da okuyacaksa alan adlarının tutarlılığı bakım maliyetini etkiler. Aynı kavramı bir yanıtta title, başka yanıtta name olarak kullanmak gereksiz çeviri işleri yaratabilir; ancak gerçekten farklı anlamlar taşıyan alanları da sırf benzer göründükleri için birleştirmemek gerekir. Boş dizi ile null arasındaki farkı API sözleşmesinde açıklamak, istemcinin eksik bilgi ile sıfır sonuç durumunu ayırmasını sağlar. Örneğin galeri hiç tanımlanmamış olabilir veya tanımlı ama henüz görsel eklenmemiş olabilir. Bu ayrım arayüzde farklı geri bildirim gerektirebilir. Verinin biçimi kadar bu biçime verilen anlamın da ekip tarafından paylaşılması önemlidir.
Ayrıştırıldı diye anlaşılmış olmaz.
Biçim kontrolü
Tırnaklar, virgüller ve parantezler kurala uygundur; JSON ayrıştırıcısı dosyayı okuyabilir. Bu, aktarımın sözdizimi açısından başarılı olduğunu gösterir. Fakat eksik ürün adı, yanlış para birimi veya beklenmeyen veri türü hâlâ dosyanın içinde olabilir. Ayrıştırma, anlamlı bir sipariş oluşturduğunun ya da içeriğin güvenilir olduğunun kanıtı değildir.
Veri sözleşmesi
Hangi alanların gerekli olduğu, hangi türleri kabul ettiği ve hangi değerlerin geçerli sayıldığı tanımlanır. Gelen veri bu sözleşmeye göre değerlendirilir. Ardından iş kuralları devreye girer: ürün gerçekten var mı, tarih uygun mu, çağıranın bu kayda erişimi var mı? Aynı dosya bu farklı katmanların her birinde ayrı bir soru yanıtlar.
Veri biçimini sözleşmeyle tamamlamak
JSON yalnız verinin yazım biçimini belirler; bir alanın ne anlama geldiğini veya zorunlu olup olmadığını tek başına açıklamaz. Uygulamalar arasında kullanılacak alan adları, veri türleri ve boş değer davranışı ayrıca tanımlanır. Geçerli JSON almak ile beklenen veriyi almak farklı kontrollerdir.
- Metin, sayı, mantıksal değer ve null kullanımını ayır.
- Eksik alanlarla boş değerlerin anlamını belgeleyin.
- Gelen veriyi kullanmadan önce beklenen yapıya göre doğrula.
JSON bir programlama dili mi?
Hayır. JSON veri değişimi için kullanılan bir metin biçimidir. JavaScript nesne gösterimiyle ilişkili olsa da fonksiyon veya yorum gibi JavaScript özelliklerini taşımaz. Veriyi ayrıştırmak onu güvenilir veya doğru yapmaz.
İşin içinde sorulacaklar.
JSON ile JSON-LD aynı şey mi?
JSON-LD, bağlantılı veriyi JSON üzerinden ifade etmeye yarayan bir yaklaşımdır. Her JSON dosyası JSON-LD değildir. Bir arama motoruna içerikteki kurum veya yazı ilişkilerini anlatan JSON-LD, bu bağlamı belirten ek anahtarlar kullanır. Sıradan bir API yanıtı ise uygulamanın kendi sözleşmesini izleyebilir. Benzer görünmeleri aynı amaçla kullanıldıkları anlamına gelmez; sayfadaki işaretleme görünür içeriği doğru anlatmalıdır.
JSON içine HTML koymak güvenli mi?
Metin değeri HTML karakterleri içerebilir; bu yalnız bir taşıma biçimidir. Güvenlik, değerin daha sonra nerede ve nasıl kullanıldığına bağlıdır. Kullanıcıdan gelen metni sayfada ham HTML olarak işlemek farklı riskler yaratır. Ekranda metin olarak göstermek ile çalıştırılabilir işaretlemeye dönüştürmek ayrılır. Verinin JSON içinden gelmesi onu otomatik olarak temiz veya güvenilir yapmaz.
Her API JSON döndürmek zorunda mı?
Hayır. API sözleşmesi ihtiyaca göre başka metin veya ikili biçimler kullanabilir. Bir görsel, video ya da dosya indirme yanıtını sırf API olduğu için JSON’a çevirmek gerekmez. JSON, yapılandırılmış küçük ve orta ölçekli bilgi alışverişinde yaygın bir seçenektir. Hacim, akış ihtiyacı, istemci desteği ve okunabilirlik birlikte değerlendirilir; format adı tek başına performans kararı vermez.
Bir proje kartının veri haritası.
Bir proje kartındaki görünen bütün alanları yaz. Bunları JSON ile başka bir ekrana göndereceğini varsay. Kod örneğini kopyalamadan önce, her alanın türünü ve eksik kaldığında ne olacağını tanımla. Küçük bir veri modeli, arayüzdeki belirsizlikleri görünür kılabilir.
JSON veriye düzenli bir bavul sağlar; içine ne koyduğunu ve karşı tarafın onu nasıl yorumlayacağını ayrıca belirlemen gerekir. İyi veri sözleşmesi, dosya biçiminden daha uzun ömürlüdür.
Bağlantılı kavramlar
- APIAPI, yazılımların belirlenmiş kurallar ve veri biçimleri üzerinden birbiriyle iletişim kurmasını sağlayan arayüzdür.
- Yapılandırılmış veriYapılandırılmış veri, sayfadaki varlıkları ve ilişkileri tanımlı bir söz varlığıyla makinelerin okuyabileceği biçimde ifade etmektir.
- MCPMCP, modellerin araç ve kaynaklarla tanımlı bir protokol üzerinden çalışabilmesine yönelik bağlantı yaklaşımıdır.

