JSON biçimlendirici
JSON’u iki boşluk, dört boşluk veya sekme girintisiyle güzelleştirin ya da tek satıra küçültün; ayrıştırılamıyorsa hatalı satır ve sütunu gösterir.
Çıktı burada görünecek
Bu JSON biçimlendirici ne yapar
JSON (JavaScript Object Notation), yapılandırılmış veriyi programlar arasında taşımak için en yaygın biçimdir — API yanıtları, yapılandırma dosyaları, günlük satırları ve daha fazlası. Kompakt olacak şekilde tasarlanmıştır; bu da nesneler birkaç düzey iç içe geçtiğinde ya da tek satırda geldiğinde onu okumayı zorlaştırır. Bu araç, yapıştırdığınız herhangi bir JSON’u iki şekilde yeniden yazar: güzelleştirilmiş, yapının bir bakışta belli olması için tutarlı girintiyle; ya da küçültülmüş, tel üzerinden göndermek için olabildiğince küçük olsun diye her isteğe bağlı boşluktan arındırılmış.
Ayrıca biçimlendirirken doğrular. Metni yeniden serileştirmeden önce ayrıştırdığı için, geçersiz JSON asla yanıltıcı çıktı üretmez — bunun yerine, çıkarabildiği her yerde ayrıştırmanın başarısız olduğu satır ve sütunu alırsınız; böylece doğrudan soruna atlayabilirsiniz.
Güzelleştirme ve küçültme — hangisi ne zaman
İki mod karşıt amaçlara hizmet eder ve çoğu iş akışı ikisini de farklı aşamalarda kullanır:
- Okurken ya da hata ayıklarken güzelleştirin — bir API yanıtını incelerken, iki yükü karşılaştırırken ya da bir pull request’te bir yapılandırma dosyasını gözden geçirirken. Girinti, bir metin duvarını göz atılabilir bir ağaca dönüştürür.
- Gönderirken küçültün — JSON’u HTML’e gömerken, bir çerezde ya da önbellekte saklarken ya da her baytın önemli olduğu bir istek gövdesinde gönderirken. Küçültülmüş JSON, yalnızca boşluksuz, bayt bayt aynı veridir.
Girinti seçici (2 boşluk, 4 boşluk ya da bir sekme) yalnızca güzelleştirilmiş çıktıyı etkiler. İki boşluk, JavaScript ve web araçlarında en yaygın kuraldır; dört boşluk ya da sekmeler onları tercih eden ekiplere uygundur. Hangisini seçerseniz seçin, sonuç yine de geçerli JSON’dur — girinti tümüyle görseldir.
Doğrulama hatalarını okuma
JSON geçersiz olduğunda araç, yalın bir «geçersiz» yerine ilk sorunun satır ve sütununu bildirir — satır ile sütunun nereyi gösterdiğine dair bölümün anlattığı tek durum dışında. Motor hata mesajları tarayıcılar arasında farklıdır ve çoğu zaman bir konum içermez; bu yüzden konum bağımsız olarak hesaplanır ve aramaya başlamak için makul bir noktayı gösterir. İlk hatayı düzeltip yeniden kontrol edin — tek bir başıboş karakter çoğu zaman birkaç görünür soruna dönüşür.
Yaygın JSON hataları
JSON, benzediği JavaScript nesne değişmezlerinden daha katıdır. İnsanları en sık takan hatalar şunlardır:
- Sondaki virgüller: bir nesne ya da dizideki son öğeden sonra bir virgül JavaScript’te geçerlidir, ama JSON’da değildir.
- Tek tırnaklar: JSON dizeleri ve anahtarları çift tırnak kullanmalıdır. 'value' geçersizdir; "value" doğrudur.
- Tırnaksız anahtarlar: her nesne anahtarı tırnaklı bir dize olmalıdır; bu yüzden { name: "x" }, { "name": "x" } olmalıdır.
- Yorumlar: JSON’un yorum söz dizimi yoktur. // ve /* */ bir ayrıştırma hatasına neden olur.
- Özel sayılar: NaN, Infinity ve -Infinity geçerli JSON sayıları değildir.
- Yanlış tırnak karakterleri: bir kelime işlemciden yapıştırılan «akıllı tırnaklar» tırnak gibi görünür, ama farklı karakterlerdir ve ayrıştırılmaz.
Bildirilen satır ve sütun nereyi gösterir
Konum, bir şeyi atladığınız yer değildir. Ayrıştırıcının orada yasal olarak bulunamayacak bir şeyle ilk kez karşılaştığı yerdir ve bunlar genellikle iki ayrı yerdir. Aşağıdaki nesnede 3. satırda onu kapatması gereken virgül eksik ve araç 4. satır, 3. sütunu bildirir: bir sonraki anahtarın açılış tırnağını. O tırnak gelene kadar hiçbir şey yanlış değildi, çünkü belge 3. satırdan sonra yasal olarak bitebilirdi; ayrıştırıcı bu yüzden eksikliği ancak ne virgül ne de kapanış süslü parantezi olan bir şeyle karşılaştığında öğrenir.
{
"id": 42,
"name": "widget"
"price": 9.99
}- Eksik bir virgül, ardından ne geliyorsa onun ilk karakterinde bildirilir; yukarıdaki gibi girintili JSON’da bu bir sonraki satırdır, o yüzden adı verilen satırı bir üstündekiyle birlikte okuyun.
- Fazla bir virgül kapanış parantezinde bildirilir: son çifti 2. satırda olan bir nesne için 3. satır, 1. sütun. Virgül bir çift daha vaat eder ve parantez bu vaadi bozan şeydir.
- Kapatılmamış bir dize genellikle açılış tırnağında değil, açıldığı satırın sonunda bildirilir; çünkü daha sonraki bir satırdaki bir sonraki tırnak onu başka bir yerde kapatabilir. Bir satır sonu bir JSON dizesinin içinde yer alamaz, dolayısıyla satır sonu orada bulunamayacak ilk karakterdir.
- Kusursuz görünen bir belgede 1. satır, 1. sütun genellikle bir bayt sırası işareti anlamına gelir. Bazı düzenleyiciler UTF-8 olarak kaydederken bir tane yazar; görünmezdir, açılış parantezinden önce durur ve JSON’un ona yer verecek bir yeri yoktur.
Aracın hiçbir konum çıkaramadığı yerde ise, tahmin edilmiş bir koordinat söylemek yerine başarısızlığı konum vermeden bildirir. Kusursuz doğru bir söz dizimini gösteren, güvenle verilmiş bir satır ve sütun sizi yanlış yerde aratırdı; bu da belgenin ayrıştırılmadığını yalnızca bilmekten daha kötüdür.
Biçimlendirme neyi değiştirir, neyi korur
Neredeyse her belge için yanıt boşluktur ve başka bir şey değildir. Ama araç metninizi düzenlemez: onu gerçek değerlere ayrıştırır ve o değerleri yeniden yazar; beş şey bu gidiş dönüşten sağ çıkmaz. Bunların hiçbiri aracın kusuru değildir — her biri, JSON belirtiminin bir sayı ya da bir nesne için söylediği şeydir — ve her biri, çıktıyı özgün metninizin üstüne yapıştırmadan önce bilinmeye değer.
- Aynı anahtarın iki kez yazılması: ikisinden yalnızca sonuncusu sağ çıkar, çünkü bir nesne bir anahtarı iki kez taşıyamaz. RFC 8259, adları yinelenen bir nesneyi alan yazılımın öngörülemez davrandığını söyler ve başka bir ayrıştırıcı ilkini tutabilir; dolayısıyla ikisinden hangisinin size kaldığı da güvenilecek bir şey değildir.
- On beş basamaktan uzun bir tam sayı: JSON sayıları çift duyarlıklı kayan noktalı sayı olarak okunur; bu biçim iki üzeri elli üçe kadar her tam sayıyı tam tutar — on altı basamaklı bir sayı — bu yüzden on beş basamaklı bir tam sayı her zaman sağ çıkar, daha uzun biri çıkmayabilir. 12345678901234567890 yapıştırın, 12345678901234567000 çıkar. Uzun veritabanı kimlikleri alışılmış kurbandır: yapabiliyorsanız onları dize olarak tutun.
- Üslü ve sondaki sıfırlı biçimler normalleştirilir: 1e3 geri 1000 olarak, 1.50 ise 1.5 olarak döner. Bu, standart biçimde yazılmış aynı sayıdır.
- O biçimin taşıyabileceğinin dışında kalan bir büyüklük başka bir şey olarak döner: 1e400’ün çift duyarlıkta bir değeri yoktur ve null olarak döner, 1e-400 ise 0 olarak döner. Uzun bir ondalık kesir, uzun bir tam sayı gibi, biçimin sahip olduğu duyarlığa yuvarlanır.
- Bir kaçış dizisi, gösterdiği karaktere dönüşür: \u00e9 geri é olarak döner, kaçışlanmış bir vekil çifti ise hecelediği emoji olarak. Herhangi bir ayrıştırıcı için bunlar aynı dizedir; iki yazımdan biri yalnızca daha kısadır.
Anahtar sırası yazdığınız gibi korunur; bilinmeye değer bir istisnayla: yalnızca basamaklardan oluşan ve yalın bir negatif olmayan tam sayı gibi okunan, yaklaşık dört milyarın altındaki bir anahtar, dizi indeksi sayılır ve nereye koyduğunuzdan bağımsız olarak, sayısal sırayla nesnesinin başına döner. Başka hiçbir şey oynamaz: başka hiçbir anahtar yeniden sıralanmaz, hiçbiri eklenmez ya da yeniden adlandırılmaz. Bunlardan biri sizin için önemliyse, güzelleştirmek yerine küçültün ve sonucu özgün metninizle karakter karakter karşılaştırın. Gidiş dönüşün ne yaptığını görmenin en kısa yolu budur.
İstediğiniz JSON bir dizenin içindeyken
Web kancası günlükleri, mesaj kuyrukları ve veritabanı sütunları çok sık olarak bütün bir JSON belgesini tek bir dize değeri olarak taşır ve içindeki her tırnak kaçışlanmıştır. Dıştaki belge kusursuz geçerlidir, bu yüzden araç onu güzelleştirir ve geçerli olduğunu bildirir — okumaya geldiğiniz kısım ise uzun bir ters bölü satırı olarak kalır. Ters giden bir şey yoktur: bunlar iki belgedir, biri diğerinin bir dizesinin içine sarılmıştır.
{
"event": "order.created",
"payload": "{\"id\":42,\"total\":19.99}"
}Bu yüzden onu okumak iki geçiş ister. Dıştaki belgeyi burada biçimlendirin, istediğiniz dizenin tırnakları arasında duranı kopyalayın, kaçışlamayı geri alın ve sonucu yeniden yapıştırın. JSON dize kaçışlama / çözme aracı bu orta adımı yapar: çözme yönü \" dizisini yeniden " yapar ve satırı bu sayfanın biçimlendirebileceği bir belgeye döndürür. Dosyayı üreten şeyi siz denetliyorsanız, daha iyi düzeltme daha yukarıdadır: yükü dize olarak değil iç içe bir nesne olarak gönderin, o zaman hiçbir geçişe gerek kalmaz.
Satır başına bir nesne, bir belge değildir
Günlük dosyaları, API dışa aktarımları ve akış uç noktaları yaygın olarak satır başına bir tam JSON nesnesi tutar; biçimin adı JSON Lines ya da NDJSON’dur. Her satır tek başına geçerli JSON’dur, ama dosya bir JSON belgesi değildir, çünkü bir JSON belgesi tam olarak bir üst düzey değer tutar, bu ise birkaç tane tutar — biri diğerinin ardından ve onları birleştiren hiçbir şey olmadan.
{"level":"info","msg":"started"}
{"level":"warn","msg":"retrying"}
{"level":"error","msg":"gave up"}Bunu buraya yapıştırın ve araç 2. satır, 1. sütunu bildirir: ilk nesne temiz biçimde bitti, sonra belgenin bitmiş olması gereken yerde bir ikincisi başladı. Oradan iki yol vardır. Tek seferde bir satır biçimlendirin; tek bir günlük kaydını okurken isteyeceğiniz budur. Ya da dosyayı tek bir belgeye çevirin — satırları köşeli parantez içine alın ve sonuncusu dışında her satırın sonuna bir virgül koyun — bir dizi bekleyen bir şeye hepsini yüklemek üzereyken isteyeceğiniz budur.
Sıkça sorulan sorular
- JSON’um bir sunucuya gönderiliyor mu?
- Hayır. Ayrıştırma, doğrulama ve biçimlendirme tümüyle tarayıcınızda JavaScript kullanılarak gerçekleşir. Yapıştırdığınız hiçbir şey yüklenmez, saklanmaz ya da kaydedilmez; bu yüzden hassas yüklerle kullanmak güvenlidir.
- Biçimlendirme verimi değiştirir mi?
- Neredeyse her belge için hayır: güzelleştirme ve küçültme yalnızca belirteçler arasındaki boşluğu ekler ya da kaldırır; anahtarlar, değerler ve yapı aynı döner. İstisnalar vardır ve her biri, metninizin yeniden yazılmadan önce gerçek değerlere ayrıştırılmasının bir sonucudur; biçimlendirmenin neyi değiştirdiğine dair bölüm hepsini sayar.
- Sayılarımı neden yeniden düzenliyor ya da yeniden biçimlendiriyor?
- Araç, JSON’u gerçek değerlere ayrıştırır ve onları geri serileştirir; bu yüzden sayılar standart biçimlerine normalleştirilir (örneğin 1e3, 1000 olur). Çift duyarlıklı kayan noktalı sayının tam tuttuğu her sayı için değer değişmez ve yalnızca yazımı standarttır. O biçimin sahip olduğundan daha çok duyarlık ya da daha çok aralık isteyen bir sayı için — on beş basamağı aşan bir tam sayı, uzun bir ondalık kesir ya da tümüyle dışında kalan bir büyüklük — değerin kendisi oynar ve biçimlendirmenin neyi değiştirdiğine dair bölüm bunun nasıl olduğunu anlatır.
- Çok büyük JSON dosyalarını işleyebilir mi?
- Büyük yükleri işleyebilir, ama her şey tarayıcıda çalıştığı için aşırı büyük dosyalar (onlarca megabayt) cihazınıza bağlı olarak yavaş olabilir ya da bellek sınırlarına ulaşabilir.
- Nesne anahtarlarının sırasını korur mu?
- Neredeyse her zaman evet: anahtar sırası girdinizde göründüğü gibi tam olarak korunur ve araç kendiliğinden hiçbir şeyi sıralamaz. Tek istisna, yalnızca basamaklardan oluşan ve yalın bir negatif olmayan tam sayı gibi okunan, yaklaşık dört milyarın altındaki bir anahtardır; o, dizi indeksi sayılır ve sayısal sırayla nesnesinin başına döner. JSON bir nesneyi sırasız bir topluluk olarak adlandırır, yani kırılan bir şey yoktur, ama şaşırtır; biçimlendirmenin neyi değiştirdiğine dair bölüm ayrıntısını taşır.
- JSON ile bir JavaScript nesnesi arasındaki fark nedir?
- JSON, veri değişimi için bir metin biçimidir; bir JavaScript nesnesi ise bellekteki bir değerdir. JSON daha katıdır: çift tırnaklı anahtarlar ve dizeler gerektirir, sondaki virgülleri ve yorumları yasaklar ve yalnızca sabit bir değer türü kümesine izin verir (dizeler, sayılar, mantıksal değerler, null, diziler ve nesneler).
- JSON5 ya da JSONC’yi (yorumlu JSON) biçimlendirebilir miyim?
- Hayır. Bu araç katı, standart JSON’u doğrular. JSON5 ve JSONC, JSON belirtiminin parçası olmayan yorumlar ve başka kolaylıklar ekler; bu yüzden hata olarak bildirilirler.
- Bir dize ya da bir sayı tek başına geçerli JSON mudur?
- Evet. Bir JSON belgesi herhangi bir tek değerdir; bu yüzden "merhaba", 42, true ve null her biri eksiksiz ve geçerlidir ve bu araç dördünü de biçimlendirir. Hep böyle değildi: RFC 4627 (2006) üst düzeyde bir nesne ya da bir dizi istiyordu, RFC 7159 bunu 2014’te gevşetti ve daha esnek kuralı bugün RFC 8259 taşıyor. Yalın bir değeri geri çeviren her şey daha eski belirtimi izliyor.
- Burada JSON Lines ya da NDJSON biçimlendirebilir miyim?
- Tek seferde bir satır, evet: her satır eksiksiz bir JSON belgesidir. Dosyanın tümü bir seferde, hayır: bu bir belge değil birkaç belgedir ve araç ikincisinin başladığı yeri, 2. satır 1. sütunu bildirir. Yukarıdaki satır başına bir nesne bölümü iki çıkış yolunu da anlatır.
- Doğru görünen bir belgede neden 1. satır, 1. sütunu bildiriyor?
- Neredeyse her zaman açılış parantezinden önceki görünmez bir karakter yüzünden ve neredeyse her zaman bir düzenleyicinin UTF-8 olarak kaydederken bıraktığı bir bayt sırası işareti yüzünden. Gerçek bir karakterdir, görülemez ve JSON’da ona yer yoktur. Dosyayı bayt sırası işareti olmadan yeniden UTF-8 olarak kaydedin ya da en baştaki karakteri silip yeniden yapıştırın.
- Biçimlendirme yinelenen bir anahtarı atar mı?
- Evet ve çıktının girdiden daha azını tuttuğu tek durum budur. Aynı nesnede iki kez yazılan bir anahtar yalnızca ikisinden sonuncusunu bırakır, çünkü araç metninizi gerçek değerlere ayrıştırır ve bir nesne bir anahtarı iki kez taşıyamaz. İkisinden hangisinin sağ çıktığı da taşınabilir değildir: RFC 8259, böyle bir nesneyi alan yazılımın öngörülemez davrandığını söyler ve başka bir ayrıştırıcı ilkini tutabilir.
İlgili araçlar
- JSON dize kaçışlama / çözme
Metni bir JSON dizesi için kaçışlayın ya da kaçışlanmış olanı geri okuyun.
- JSON farkı
İki JSON belgesini karşılaştırın — anahtar sırası sayılmaz.
- SQL biçimlendirici
SQL’i biçimlendirin ve güzelleştirin — birden çok lehçe.
- XML biçimlendirici
XML’i biçimlendirin ve söz dizimini kontrol edin — güzelleştirin veya küçültün.