JSON Verisi (.json)
RFC StandartJavaScript 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:
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 5BASCII GÖSTERİMİ: { or [
Standartlaştırma: RFC 8259 / ECMA-404 / ISO/IEC 21778
Teknik Özellikler
| Kapsayıcı mimarisi | Hafif, metin tabanlı, dilden bağımsız veri değişim formatı |
| Sıkıştırma | Gzip / 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 Boyutlar | Sınırsız; yalnızca ayrıştırıcı belleği ve maksimum metin uzunluğu ile sınırlıdır |
| Şeffaflık | Geçerli değil |
| Akış ve Aşamalı İşleme | NDJSON (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 Nitelik | JSON (Güncel) | YAML | XML | Protocol 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ği | Yok (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ü Boyutu | Kompakt metin (çok yüksek gzip oranı) | Kompakt metin | Ayrı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ı
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 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 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.
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.
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.
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.
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.
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.
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.