JSON dize kaçışlama / çözme
Metni bir JSON dizesi içinde geçerli olacak şekilde kaçışlayın ya da kaçışlanmış JSON metnini söylediği şeye geri çözün — tam hata konumlarıyla.
Çıktı burada görünecek
Bu araç ne yapar
Bir JSON dizesi ham bir çift tırnak, ham bir ters eğik çizgi ya da ham bir satır sonu içeremez — biçim, dizelerin nerede başlayıp bittiğini işaretlemek için bu karakterlere ihtiyaç duyar. Bu yüzden bunun yerine kaçış dizileri olarak yazılırlar ve bu araç iki biçim arasında dönüştürür. Sıradan metni yapıştırın, JSON'a bırakmaya hazır kaçışlanmış sürümü alın; yönü değiştirin, kaçışlanmış metin yeniden okunabilir olur.
İkinci yön, insanların genellikle geldiği yöndür: bir ters eğik çizgi duvarı gibi görünerek geri gelen bir günlük satırı, bir hata mesajı ya da bir curl yanıtı. Her şey tarayıcınızda çalışır; okumaya çalıştığınız yük bir üretim yanıtı olduğunda bunun önemi vardır.
Kaçış dizileri
JSON kısa bir kaçış listesi tanımlar ve araç tam olarak o listeyi kullanır — daha egzotik hiçbir şey değil, çünkü başka her şey geçerli JSON değildir.
- \" — bir çift tırnak, aksi hâlde dizeyi sonlandırırdı.
- \\ — tek bir ters eğik çizgi. Windows yollarının ve regex desenlerinin ikiye katlanmasının nedeni budur.
- \n ve \r — satır sonu ve satır başı.
- \t — sekme. \b ve \f de vardır, geri silme ve sayfa ilerletme için.
- \/ — eğik çizgi için isteğe bağlı bir kaçış. Geçerli, asla gerekli değil; bu araç onu kabul eder ve asla üretmez.
- \uXXXX — herhangi bir karakter on altılık koduyla; denetim karakterlerinin ve ASCII dışındaki her şeyin nasıl yazılabileceği budur.
Denetim karakterleri — 32 kodunun altındaki her şey — bir JSON dizesinin içinde hiç değişmez bir biçime sahip değildir; bu yüzden ASCII çıktısı istemediğinizde bile her zaman \uXXXX kaçışları olarak çıkarlar.
Ters eğik çizgiler neden çoğalır
Bunun gibi bir araca başvurmanın en yaygın nedeni, birden çok kez kaçışlanmış metindir. Her kodlama turu, kendinden önceki turun getirdiği ters eğik çizgileri kaçışlar; böylece tek bir tırnak karakteri gitgide uzayan bir kuyruk büyütür:
original He said "hi" escaped He said \"hi\" escaped x2 He said \\\"hi\\\"
Bu, bir değer JSON'a serileştirildiğinde, o JSON başka bir JSON belgesinin içinde bir dize olarak saklandığında ve sonuç günlüğe yazıldığında gerçekleşir. Bir kez çözmek bir katmanı geri alır; metin normal okunana dek sonucun üzerinde yeniden çalıştırın. Çözersiniz ve çıktıda hâlâ başıboş ters eğik çizgiler varsa, bu, dönüşümde bir hata değil, gerçek bir fazladan katmandır.
Tırnaklar: değer mi parça mı
Tam bir JSON dize değeri, çevreleyen çift tırnakları içerir. Ama çoğu zaman, kodunuzda ya da yapılandırmanızda zaten var olan bir dizeye yapıştırıyorsunuzdur; orada bu tırnaklar yanlış olurdu. Bu yüzden kaçışlama varsayılan olarak çıplak kaçışlanmış içeriği üretir ve «çevreleyen tırnakları dahil et» seçeneği, bütün olarak yapıştırabileceğiniz bir değer istediğinizde onları ekler.
Çözme böyle bir seçime gerek duymaz — her iki biçimi de kabul eder. Bir parça yapıştırın ya da bir JSON belgesinden doğrudan tam bir tırnaklı değer yapıştırın; çevreleyen tırnaklar tanınır ve ayıklanır.
Unicode ve onu ne zaman kaçışlamalı
JSON bir Unicode biçimidir. «שלום» ve «😀», tam olarak yazıldığı gibi kusursuzca geçerli JSON dizeleridir ve onları okunabilir bırakmak buradaki varsayılandır. \uXXXX seçeneği, yetişememiş sistemler için vardır: ASCII varsayan ve başka her şeyi bozan eski günlük hatları, terminaller ve ayrıştırıcılar.
O seçenek açıkken bir ayrıntı önemlidir. Temel aralığın dışındaki karakterler — çoğu emoji — dahili olarak vekil çifti (surrogate pair) denen iki birim olarak saklanır ve biçim, iki yarının da ayrı kaçışlar olarak yazılmasını gerektirir. Bu yüzden bir emoji, daha uzun tek bir kaçış yerine iki \u kaçışı olur. Bunu yanlış yapan araçlar, hiçbir ayrıştırıcının kabul etmediği kaçışlar üretir; bir sistemde sağ çıkıp bir sonrakinde bozulan emojilerin olağan açıklaması budur.
Çözme başarısız olduğunda
Her ters eğik çizgi dizisi geçerli bir kaçış değildir. \q, JSON'da hiçbir şey ifade etmez ve \u12, basamaklarının yarısı eksik bir \u kaçışıdır. Bunları değişmeden geçirip iyi görünen ama verinizin söylediği şey olmayan bir çıktı vermek yerine, araç durur ve hatalı dizinin başladığı tam satır ve sütunu bildirir.
Pratikte o hata bilgilendiricidir: başıboş bir \q genellikle metnin en baştan hiç JSON-kaçışlanmadığı anlamına gelir ve kesik bir \u genellikle girdinin kısaltıldığı anlamına gelir — bir uzunluk sınırında kırpılmış bir günlük satırı ya da dizinin ortasında duran bir kopya.
Sıkça sorulan sorular
- Metnimde neden her yerde \\" var?
- Birden çok kez kaçışlandı. Her geçiş, bir önceki geçişin ters eğik çizgilerini kaçışlar; böylece tek bir özgün tırnak birkaç tanesiyle öncelenmiş olabilir. Tekrar tekrar çözün — her çalıştırma tam olarak bir katmanı kaldırır — metin normal okunana dek.
- Çevreleyen tırnakları açmalı mıyım?
- Yalnızca yapıştırılacak tam bir JSON değeri istiyorsanız, örneğin bir anahtarın tüm sağ tarafı olarak. Kodunuzda zaten var olan bir dizeye yapıştırıyorsanız kapalı bırakın — yoksa tırnak içinde tırnaklarla sonuçlanırsınız.
- İbranice, Arapça, Çince ya da emoji kaçışlama gerektirir mi?
- Hayır. JSON dizeleri Unicode'dur; bu yüzden bu karakterler oldukları gibi geçerlidir ve varsayılan olarak okunabilir kalır. \uXXXX seçeneğini yalnızca aşağı akıştaki bir sistem düz ASCII'de ısrar ettiğinde açın; emoji o zaman gereken iki vekil kaçışı olarak yazılır.
- «geçersiz kaçış dizisi» ne anlama gelir?
- Girdi, bir ters eğik çizginin ardından JSON'un tanımlamadığı bir şey içerir, \q gibi ya da ardından dört on altılık basamak olmayan bir \u. Konum bildirilir; böylece o noktaya bakabilirsiniz: genellikle metin en baştan JSON-kaçışlanmamıştı ya da ortasından kesilmişti.
- Metnim herhangi bir yere gönderiliyor mu?
- Hayır. Kaçışlama ve çözme tümüyle tarayıcınızda çalışır; böylece token'lar, yükler ve günlük satırları cihazınızdan asla çıkmaz.