JSON Verisi (.json)

RFC Standart

JavaScript Object Notation (JSON), veri değişimi için kullanılan hafif, insan tarafından okunabilir bir metin formatıdır; tamamen dilden bağımsızdır ve web API'leri için evrensel olarak kullanılır.

JSON biçimini HTML biçimine dönüştür

Tarayıcında JSON biçimini HTML biçimine ücretsiz dönüştür. Dosyaları cihazında anında dönüştür.

JSON dosyasını çevrimiçi sıkıştır

Özel - dosyalar cihazınızdan asla ayrılmaz

İncele ve Meta Veriler

İşletim sistemleri ve dosya çözümleyicileri, JSON dosyalarını başlangıçtaki ikili sihirli bayt dizisini inceleyerek tanımlar:

Dosyaları buraya seç veya bırak

Özel - dosyalar cihazınızdan asla ayrılmaz

veya yapıştır Ctrl+V
Sıfır Ağ Aktarımı Gizlilik Garantisi: Harici sunuculara 0 bayt yüklendi. Tüm işlemler tarayıcındaki korumalı alanda (sandbox) yerel olarak gerçekleştirildi.

Bayt düzeyinde başlık imzası (sihirli baytlar)

İşletim sistemleri ve dosya çözümleyicileri, JSON dosyalarını başlangıçtaki ikili sihirli bayt dizisini inceleyerek tanımlar:

HEX İMZASI (OFSET 0):

7B or 5B

ASCII GÖSTERİMİ: { or [

Standartlaştırma: RFC 8259 / ECMA-404 / ISO/IEC 21778

Teknik Özellikler

Kapsayıcı mimarisiHafif, metin tabanlı, dilden bağımsız veri değişim formatı
SıkıştırmaGzip / Brotli / Zstandard metin sıkıştırma (genellikle %80-%90 oran elde edilir)
Bayt Düzeni (Endianness)UTF-8 kodlu Unicode (Byte Order Mark / BOM önerilmez)
Renk UzaylarıGeçerli değil
Kanallar ve YapıAltı temel veri türü: nesne, dizi, metin, sayı, mantıksal değer ve null
Maksimum BoyutlarSınırsız; yalnızca ayrıştırıcı belleği ve maksimum metin uzunluğu ile sınırlıdır
ŞeffaflıkGeçerli değil
Akış ve Aşamalı İşlemeNDJSON (Newline Delimited JSON) / JSON Lines, aşamalı akış işlemeyi mümkün kılar

Teknik karşılaştırma matrisi: JSON ve rakipleri

Teknik NitelikJSON (Güncel)YAMLXMLProtocol Buffers
Sözdizimi KarmaşıklığıMinimal (6 tip, katı sözdizimi)Yüksek (girinti tabanlı, karmaşık şartname)Yüksek (ayrıntılı kapanış etiketleri, ad alanları)Şema tanımlı ikili iletişim formatı
Ayrıştırma PerformansıTüm modern dillerde son derece hızlıYavaş (karmaşık girinti ayrıştırma)Orta ile yavaş arasında (ağır DOM oluşturma)Ultra hızlı (sıfır kopyalı ikili seri durumdan çıkarma)
Yorum DesteğiYok (meta veri şişmesini önlemek için kasıtlı olarak hariç tutulmuştur)Var (# yorumlar)Var (<!-- yorumlar -->)Var (.proto dosyalarında)
Ağ Veri Yükü BoyutuKompakt metin (çok yüksek gzip oranı)Kompakt metinAyrıntılı metin (yoğun etiket tekrarı)Ultra kompakt ikili

Yaygın Bozulma Modları ve Hex Kurtarma Kılavuzu

JSON içinde X konumunda beklenmeyen , belirteci: sözdizimi hatası.

Kök Neden: Bir dizideki veya nesnedeki son öğeden sonra gelen sondaki virgül; bu, RFC 8259 JSON'da kesinlikle yasaktır.

Kurtarma: JSON.parse() işlevine vermeden önce nesne anahtarlarının ve dizi öğelerinin sonundaki virgülleri kaldır.

JSON içinde beklenmeyen ' belirteci: sözdizimi hatası.

Kök Neden: Çift tırnak (" ") yerine tek tırnak (' ') içine alınmış metinler veya anahtarlar.

Kurtarma: Tüm tek tırnaklı dizeleri ve anahtarları standart çift tırnaklı biçime dönüştür.

Güvenlik Analizi ve Ayrıştırıcı Saldırı Vektörleri

JSON yalnızca metinden oluşur ve doğrudan kod yürütmez, ancak güvenilmeyen JSON'ı ayrıştırmak Prototip Kirlenmesi, ReDoS veya belleğin tükenmesine yol açabilir.

Bilinen Saldırı Vektörleri

  • Prototip Kirlenmesi: JavaScript uygulamalarında Object.prototype'ı değiştiren '__proto__' veya 'constructor' adlı anahtarlar.
  • Derin iç içe geçmiş JSON yapıları (ör. 10.000 açılış parantezi) yoluyla hizmet reddine neden olan yığın taşması.
  • Sayısal hassasiyet kaybı: 2^53 - 1'den (9.007.199.254.740.991) büyük JavaScript sayıları sessizce hassasiyet kaybeder.

Savunmaya yönelik en iyi uygulamalar: JSON'ı asla eval() ile değerlendirmeyin. JSON.parse() kullanın ve özyinelemeli nesne birleştirme fonksiyonlarında '__proto__' özelliklerini temizleyin.

Tarihsel kökenler ve önemli dönüm noktaları

2017RFC 8259, JSON için tek zorunlu karakter kodlaması olarak UTF-8'i standartlaştırır.
2013ECMA-404, birçok programlama dili ve platformda kullanılan JSON sözdizimini tanımlar.
2001Douglas Crockford, durumsuz tarayıcıdan sunucuya veri iletişimini sağlamak için JSON'ı tanımlar.

Temel Avantajlar ve Artılar

  • İnsan tarafından okunabilir, kendi kendini açıklayan ve özlü metin yapısı.
  • JavaScript motorlarında (JSON.parse) ve her büyük programlama dilinde yerleşik ayrıştırma desteği.
  • Katı belirtim, keyfi kod yürütülmesini engeller.

Teknik Kısıtlamalar ve Eksiler

  • Yorum satırları, sondaki virgüller veya döngüsel nesne referansları için destek yoktur.
  • Yerleşik ikili türler yoktur (ikili veriler base64 ile kodlanmalıdır, bu da boyutu %33 artırır).
  • Protocol Buffers veya MessagePack gibi ikili formatlara kıyasla verimsiz serileştirme.

İlginç Teknik Bilgiler

  • Douglas Crockford, orijinal JSMin JSON araçlarına 'Yazılım İyi niyetle kullanılmalı, Kötülük için değil' yazılım lisansı maddesini eklemiştir.
  • JSON, JavaScript sözdiziminin katı bir alt kümesidir, ancak ES2019'a kadar ham kaçışsız U+2028 ve U+2029 karakterleri JSON'da geçerliydi ancak JavaScript metinlerinde geçersizdi.
  • Douglas Crockford, ECMAScript 5'te özel JSON.parse() API'leri standartlaştırılmadan önce, erken dönem web tarayıcılarının JavaScript'in yerleşik eval() fonksiyonunu kullanarak JSON'ı doğrudan nesnelere dönüştürebildiğini keşfetmiştir.

Sıkça Sorulan Teknik Sorular

JSON neden yorum satırlarına izin vermiyor?

JSON dilbilgisi yorumlara izin vermez. Uygulamalar uzantıları ve uygulamaya özgü verileri farklı işleyebilir; bu nedenle biçim tek başına birlikte çalışabilirliği garanti etmez.

Hassasiyet kaybetmeden JSON'da 64 bitlik tamsayılar nasıl saklanır?

JavaScript'in yerleşik Number türü, yalnızca 2^53 - 1'e kadar olan tamsayıları hassas bir şekilde destekleyen bir IEEE 754 çift duyarlıklı kayan noktalı sayıdır. 64 bitlik tamsayılar (veritabanı kimlikleri veya zaman damgaları gibi) JSON'da metin olarak (ör. '1234567890123456789') seri hale getirilmelidir.

JSON ile NDJSON / JSON Lines arasındaki fark nedir?

Standart JSON, tüm veri yükünü tek bir kök nesne veya dizi içine sararak ayrıştırıcıların değerlendirmeden önce tüm metni yüklemesini gerektirir. NDJSON (Newline Delimited JSON), ayrı geçerli JSON kayıtlarını yeni satır karakterleriyle (\n) ayırarak devasa çok gigabaytlık veri setlerinin bellek açısından verimli bir şekilde satır satır akışını sağlar.

İlgili JSON Dönüşüm Çiftleri

JSON -> HTML

JSON verilerini HTML kaynağına dönüştürmek, ham yapılı anahtar-değer çiftlerini tarayıcıda görüntülenmeye hazır, insan tarafından okunabilir web belgelerine dönüştürür.

HTML -> JSON

HTML Kaynağını JSON Verisine dönüştürmek, programlı işleme ve API alımı için insan tarafından okunabilen web belgelerini yapılandırılmış anahtar-değer çiftlerine dönüştürür.

SQL -> JSON

Bir SQL döküm metin betiğini JSON veri dışa aktarımına dönüştürmek, katı ilişkisel veritabanı tablolarını modern web uygulamaları için esnek, iç içe nesnelere dönüştürür.

JSON -> SQLITE

Yapılandırılmamış JSON metin dosyalarını yapılandırılmış SQLite ilişkisel veritabanlarına dönüştürmek, büyük veri kayıtlarının hızlı bir şekilde indekslenmesini ve sorgulanmasını sağlar.

ASE -> JSON

Adobe Swatch Exchange dosyalarını Renk JSON yapılarına dönüştürmek, ikili tasarım paletlerini modern web uygulamaları için okunabilir metin nesnelerine dönüştürür.

JSON -> ASE

Renk JSON metin verilerini Adobe ASE ikili renk örneklerine dönüştürmek, web tabanlı tasarım belirteçlerini (design tokens) ve profesyonel masaüstü düzen uygulamalarını birbirine bağlar.

GPL -> JSON

GIMP Palet metin dosyalarını Renk JSON yapılarına dönüştürmek, web uygulamalarının karmaşık ayrıştırma betiklerine gerek duymadan renk örneklerini doğrudan okumasını sağlar.

JSON -> CSS

Yapılandırılmış Renk JSON dosyalarını CSS değişkenlerine dönüştürmek, ham veri nesnelerini web siteleri için yerel biçimlendirme özelliklerine dönüştürür.