JSON Görüntüleyici ve Formatlayıcı — Ağaç, Minify | Omnvert
- JSON içindeki Base64 gibi görünen alanları algılar ve metne çözer (binary ise uyarır).
- Büyük JSON’da JSONPath ile vurgula/filtrele: $.data.items[*].id
- Hızlı istatistikler: anahtar sayısı, derinlik, dizi/obje ve yaklaşık boyut.
Açıklama
JSON’u net gör: format, ağaç gezinme, kopya/indirme butonları.
JSON'u formatlamak bir görüntü tercihidir, veriyi değiştirmez. Token'lar arasındaki boşluğun anlamı yoktur; güzelleştirilmiş belge ile minify edilmiş hali birebir aynı değerlere ayrıştırılır. Payload'ı bir insan okuyacaksa ya da dosya git'te durup satır bazlı diff alınacaksa iki boşlukla girintile. Baytlar ağ üzerinden gidiyorsa veya bir veritabanı kolonuna yazılacaksa minify et. Sıkıştırma aradaki farkı daraltır ama kapatmaz: gzip yine de eklediğin dolgunun taşınmasını ve açılmasını gerektirir.
Katı JSON, çoğu kişinin hatırladığından çok daha küçük bir dildir. Anahtarlar ve string'ler çift tırnak ister, tek tırnak geçersizdir, anahtar tırnaksız yazılamaz, yorum satırı yoktur ve } veya ] öncesindeki fazladan virgül parse hatasıdır. Parse edilemeyen yapıştırmaların büyük çoğunluğu aslında JSON değil JavaScript nesne literalidir — .js dosyasında tamamen geçerlidir, JSON.parse'a girdiği anda reddedilir. Satır ve sütun bildiren bir parser bu işi arama seansından beş saniyelik düzeltmeye indirir.
Sayı gibi duran bazı değerlerin JSON'da karşılığı hiç yoktur. NaN, Infinity ve -Infinity JSON değildir; JSON.stringify üçünü de sessizce null'a çevirir. undefined bulunduğu yere göre farklı davranır: nesne özelliği olarak fonksiyon değerleriyle birlikte tamamen atılır, dizinin içindeyse null olur; yani [1, undefined, 3] çıktıda [1,null,3] olur ve dizinin anlamı sessizce değişir. Date nesneleri ISO 8601 string'e döner ve reviver kullanmadan asla tarih olarak geri gelmez.
Büyük tamsayılar, ta canlıya kadar hayatta kalan hatadır. JSON sayıları IEEE-754 double olarak ayrıştırılır; 9007199254740991 üzerindeki her şey hassasiyet kaybeder. 19 haneli bir snowflake ID veya Postgres bigint değeri son iki üç hanesi yanlış şekilde geri döner. Hiçbir hata fırlamaz, elinde sadece artık hiçbir kayda uymayan bir değer kalır. Çözüm üretici tarafındadır: kimliği string olarak serialize et ya da büyük tamsayıları BigInt'e çeviren bir parser kullan.
Derin belgelerde ağaç görünümü hayat kurtarır. Bir Kubernetes manifest'i veya Stripe webhook'u sekiz on seviye iç içe geçer; bunu düz metin olarak okumak süslü parantez saymak demektir. İlgilenmediğin dalları kapat, ilgilendiğini aç, sorgu ifadesiyle doğrudan aradığın alana atla. Anahtar sıralamasından da söz etmek gerek: alfabetik sıra aynı nesnenin iki dökümünü temiz diff'lenir hale getirir, ama imzasını hâlâ doğrulaman gereken bir payload'ı asla yeniden serialize etme — HMAC kontrolü ham baytlar üzerinden çalışır, anahtar sırası değişince imza geçersiz olur.
Kodlama sorunları ya bozuk karakter ya da beklemediğin kaçış dizileri olarak görünür. RFC 8259 sistemler arası JSON için UTF-8 şart koşar; dosyanın başındaki byte-order mark ise gramerin parçası değildir. Birçok parser BOM'u doğrudan reddeder, o yüzden gayet düzgün görünen bir config dosyası 1. satır 1. sütunda patlar. ASCII dışı karakterler ya doğrudan é olarak ya da \u00e9 şeklinde kaçırılmış olarak durabilir; ikisi de geçerlidir ve aynı şeydir. Temel Çokdilli Düzlem dışındaki karakterler, emoji dahil, \ud83d\ude00 gibi surrogate çiftleriyle yazılır.
JSON5 ve JSONC, insanlar ısrarla yorum satırı istediği için var. VS Code, .vscode/settings.json ve tsconfig.json dosyalarını JSONC olarak okur; orada // notları ve fazladan virgül kabul edilir — ama sadece o parser tarafından. package.json katı JSON'dur, içine not düşersen npm kırılır. Bir dosyayı doğrulayıcıya yapıştırmadan önce hangi lehçede olduğunu bilmek gerekir: geçersiz denen bir JSONC dosyası bozuk olmayabilir, sadece daha katı gramere göre değerlendirilmiştir.
Günlük kullanım gösterişsiz ama süreklidir. API tek satırlık bir metin duvarı döndürür ve sen yapısını görmek istersin. JSON olması gereken cevap aslında bir HTML hata sayfasıdır; formatlamaya çalıştığın anda bunu anlarsın. Nesne tutması gereken alanda JSON içeren bir string vardır, çünkü kuyruktan geçerken bir yerde iki kez encode edilmiştir. Bir config dosyasını — CI pipeline, servis manifest'i, dil paketi — commit'lemeden önceki doğrulama birkaç saniye sürer ve fazladan virgülü başarısız deploy loglarında aramaktan çok daha ucuzdur.