Küçültülmüş Çıktı
Yukarıdaki girdiyi küçültmek, belirteçler arasındaki tüm boşlukları kaldırır:
{"name":"DevBento","version":"1.0.0","description":"Developer tools suite","features":["JSON Formatter","Base64 Encoder","UUID Generator","Regex Tester"],"config":{"theme":"dark","indent":2,"autoSave":true}}
Güzel biçimlendirilmiş sürüm 233 bayttır. Küçültülmüş sürüm 189 bayttır. Bu, yalnızca boşlukları kaldırarak yüzde 19’luk bir azalmadır.
Küçültme Neyi Kaldırır
Bir JSON küçültücü tam olarak iki kategori boşluk kaldırır:
- Belirteçler arasındaki boşluklar, sekmeler ve yeni satırlar (anahtarlar, iki nokta üst üsteler, virgüller, köşeli parantezler ve süslü parantezler arası)
- Tırnak içindeki string değerlerin içindekiler asla
Bu, {"message": "hello world"} ifadesinin {"message":"hello world"} şeklinde küçültüldüğü anlamına gelir. String içindeki boşluklar veridir ve korunur. İki nokta üst üsteden önceki boşluk sözdizimseldir ve kaldırılır.
Küçültme asla anahtar adlarını, string değerlerini, sayıları veya belgenin yapısını değiştirmez. Bir belgeyi küçültüp sonra güzel biçimlendirirseniz, taze girinti ile aynı veriyi geri alırsınız.
Gerçek Boyut Azaltma Rakamları
| Orijinal boyut | Güzel biçimlendirilmiş | Küçültülmüş | Küçültülmüş + gzip |
|---|---|---|---|
| Küçük yapılandırma (1 KB) | 1.024 B | ~820 B | ~380 B |
| Orta API yanıtı (50 KB) | 51.200 B | ~41.000 B | ~8.500 B |
| Büyük veri kümesi (1 MB) | 1.048.576 B | ~840.000 B | ~95.000 B |
Gzip baskındır. Gzip’ten önce küçültme, sıkıştırmanın zaten elde ettiğinin üzerine yalnızca yüzde birkaç kazandırır. Ancak sıkıştırılmamış statik varlıklarda her bayt önemlidir.
Küçültme Ne Zaman Önemlidir
Küçültme, belirli bir dizi durumda anlamlı tasarruf sağlar:
Tutarlı sıkıştırma olmayan statik JSON varlıkları
Çeviri dosyaları, GeoJSON, gömülü yapılandırma ve paketlenmiş veri dosyaları genellikle CDN’lerden sunulur veya doğrudan derleme çıktısına gömülür. Sıkıştırma her zaman uygulanmaz veya tutarsız olabilir. Dağıtımdan önce bunları küçültmek, kullanıcılarınızın indirdiği baytları azaltır.
Loglama ve telemetri yükleri
Log girişleri ve telemetri olayları genellikle günde milyonlarca kez diske yazılır veya kablo üzerinden gönderilir. Bu ölçekte küçültülmüş JSON girişleri depolama maliyetlerini ve ağ yükünü azaltır. Tek bir log girişi 100 bayt küçülebilir. Günde 100 milyon girişte bu, günde 10 GB’dir.
HTML içinde gömülü JSON
Başlangıç sayfa durumu olarak bir <script> etiketine JSON gömüyorsanız (sunucu tarafından işlenen React uygulamaları için yaygın bir desen), JSON HTML yükünün bir parçasıdır. Küçültmek, tarayıcı herhangi bir şeyi ayrıştırmadan önce başlangıç sayfa boyutunu azaltır.
Küçültme Ne Zaman Önemli Değildir
API sunucunuz zaten Content-Encoding: gzip veya Content-Encoding: br gönderiyorsa, küçültme ihmal edilebilir değer katar. Bunu yanıt başlıklarınızda doğrulayın:
curl -sI -H "Accept-Encoding: gzip" https://api.example.com/data | grep -i content-encoding
content-encoding: gzip görüyorsanız, API’niz zaten sıkıştırma yapıyordur. Bunun üzerine küçültme, geliştirme sırasında okunabilirlik maliyetine değmez.
Komut Satırında JSON Küçültme
jq ile -c (compact) bayrağı küçültülmüş JSON çıktısı verir:
jq -c . file.json
Bir string’i satır içi küçültme:
echo '{"name": "Alice", "age": 30}' | jq -c .
# {"name":"Alice","age":30}
Python’un json modülü:
python3 -c "import json,sys; print(json.dumps(json.load(sys.stdin), separators=(',', ':')))" < file.json
separators=(',', ':') argümanı, virgül ve iki nokta üst üsteden sonraki varsayılan boşlukları kaldırır. Bu olmadan Python’un çıktısı her sınırlayıcıdan sonra boşluklar içerir.
Node.js:
node -e "const fs=require('fs'); console.log(JSON.stringify(JSON.parse(fs.readFileSync('/dev/stdin','utf8'))))" < file.json
Çok sayıda dosyayı küçültmesi gereken betikler için jq -c . en hızlı ve en okunabilir seçenektir.