JSON Kaçış (Escape / Unescape)
JSON'u ya da herhangi bir metni koda gömülecek dize değişmezine çevirin; kaçışlı dizeyi geri çözüp okunur JSON'a dönüştürün
Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.
Bu araç işinizi gördü mü?
Teşekkürler, geri bildiriminiz alındı.
Nasıl çalışır?
İki tipik iş için kullanılır. Birincisi JSON'u bir dizeye gömmek: bir test dosyasına, bir veritabanı alanına ya da başka bir JSON'un içindeki alana JSON yazmanız gerekiyorsa JSON'u sol panele yapıştırın ve "Kaçır"ı seçili bırakın. Sağda çift tırnakla başlayıp biten, içindeki her tırnağın önüne ters eğik çizgi konmuş, satır sonlarının \n olduğu tek satırlık dize çıkar: {"ad":"x"} → "{\"ad\":\"x\"}". Bu dize JavaScript, Java ya da C# koduna olduğu gibi yapıştırılabilir. İkincisi tersidir: bir log satırında, bir API yanıtında ya da hata mesajında "{\"ad\":\"x\"}" gibi kaçışlı bir JSON gördüyseniz onu yapıştırıp "Çöz"ü seçin; dış tırnaklar atılır, kaçışlar çözülür ve sonuç geçerli JSON'sa 2 boşlukla girintilenmiş okunur hâlde gelir. Dize iki kez kaçırılmışsa (\\\" görüyorsanız) araç bunu sezip bir kat daha çözer. Hedef dil SQL ise tek tırnak ikilenir (O'Brien → 'O''Brien'), CSV ise çift tırnak ikilenir. Java/C# seçilirse Türkçe harfler \u00e7 gibi yazılır; kaynak dosyanın kodlaması ne olursa olsun bozulmaz.
Bu araç json escape, json unescape, json to string, string to json aramalarıyla da biliniyor.
Kaçış karakteri nedir?
Kaçış karakteri, ardından gelen karakterin özel anlamını kaldıran işarettir; JSON, JavaScript, Java ve C#'ta bu işaret ters eğik çizgidir (\). Dize çift tırnakla sınırlandığı için dizenin içindeki tırnak \" diye yazılır ki dize orada bitmesin; ters eğik çizginin kendisi de \\ olur. Görünmeyen karakterler de kaçışla yazılır: \n satır sonu, \t sekme, \u00e7 ise ç harfinin kod numarasıdır.
Dize değişmezi (string literal) nedir?
Dize değişmezi, bir metnin kaynak kodun ya da JSON'un içine tırnak arasında yazılmış hâlidir: "Merhaba". Değişmez ile içindeki metin aynı şey değildir; "5\" ekran" değişmezinin taşıdığı metin 5" ekran'dır. Bu araç iki biçim arasında çeviri yapar: metinden değişmez üretir (kaçır) ya da değişmezden metni geri çıkarır (çöz).
JSON kaçırma ile URL kodlama arasındaki fark nedir?
JSON kaçırma metni bir dize değişmezinin içine güvenle koymak içindir: yalnız tırnak, ters eğik çizgi ve denetim karakterleri değişir, Türkçe harfler ve boşluk olduğu gibi kalır. URL kodlama ise metni bir web adresinin parçası yapmak içindir: boşluk %20, ç %C3%A7 olur ve ASCII dışındaki her şey yüzde kodlanır. Bir JSON'u URL'nin sorgu parametresine koyacaksanız iki işlem sırayla gerekir; koda ya da başka bir JSON alanına gömecekseniz yalnız JSON kaçırma yeter. Base64 ise üçüncü bir şeydir: metni okunmaz hâle getirerek taşır.
Hangi karakter neye dönüşür
JSON ve JavaScript dizesinde çift tırnak dizeyi bitirdiği için \" olarak, ters eğik çizgi kaçış başlattığı için \\ olarak yazılır. Satır sonu, sekme ve satır başı gibi görünmez karakterler dizenin içinde düz duramaz; \n, \t, \r olur. Diğer denetim karakterleri \u001f biçiminde yazılır. U+2028 ve U+2029 karakterleri de \u ile yazılır, çünkü eski JavaScript motorları bunları dize içinde satır sonu sayıp kodu kırar.
Java/C# hedefinde aynı kaçışlara ek olarak ASCII dışındaki her karakter \uXXXX olur: ç → \u00e7, ş → \u015f. Bu, Windows'ta farklı kodlamayla kaydedilmiş bir .java dosyasında Türkçe harflerin bozulmasını önler ve çıktı JSON'da da geçerlidir. SQL hedefinde yalnız tek tırnak ikilenir; CSV hedefinde yalnız çift tırnak ikilenir, satır sonu hücrenin içinde kalır.
- " → \" · \ → \\ · satır sonu → \n · sekme → \t
- ç → \u00e7 (yalnız Java/C# hedefinde)
- O'Brien → 'O''Brien' (SQL)
- 5" ekran → "5"" ekran" (CSV hücresi)
Tuzak: çift kaçış ve MySQL'in ters eğik çizgisi
Bir JSON başka bir JSON'un içine dize olarak yazılıp sonra bütün paket yeniden kaçırılırsa tırnaklar \\\" hâline gelir; log'larda sık görülür. Çöz dendiğinde araç önce bir kat çözer, sonuç hâlâ tırnaklı bir JSON dizesiyse bir kat daha çözer ve kaç kat çözdüğünü sonuç satırında söyler. Sonuç geçerli JSON'sa girintilenir; ama 1.0 ya da 16 haneli bir kimlik gibi JSON.parse'ın değiştireceği bir sayı varsa metin olduğu gibi bırakılır, veri bozulmasın diye.
SQL'de standart kural tek tırnağı ikilemektir ve araç yalnız bunu yapar. MySQL varsayılan ayarında ters eğik çizgiyi de kaçış karakteri sayar: C:\new yolu MySQL'e yazılırsa \n satır sonuna dönüşür. MySQL kullanıyorsanız ve metinde ters eğik çizgi varsa sorgunuzu parametreli yazın; elle yazılan dizeye güvenmeyin. Aynı nedenle kullanıcıdan gelen metni sorguya bu araçla kaçırıp birleştirmek SQL enjeksiyonuna karşı koruma değildir.
Sık sorulanlar
JSON dizeye (string) nasıl çevrilir?
JSON'u sol panele yapıştırın, "Kaçır" ve "JSON / JavaScript" seçili kalsın. Sağ panelde çift tırnakla sarılmış, içindeki tırnakları \" ve satır sonları \n olan tek satırlık dize oluşur. Bu dizeyi koda ya da başka bir JSON alanına olduğu gibi yapıştırabilirsiniz.
Kaçışlı JSON dizesi nasıl normal JSON'a çevrilir?
Kaçışlı dizeyi ("{\"a\":1}" gibi) yapıştırın ve "Çöz"ü seçin. Dış tırnaklar atılır, \" tırnağa, \n satır sonuna döner. Sonuç geçerli JSON ise 2 boşlukla girintilenir; dize iki kez kaçırılmışsa araç bunu sezer ve bir kat daha çözer.
Türkçe karakterler neden \u00e7 gibi görünüyor?
Java / C# hedefi seçiliyse ASCII dışındaki her karakter \uXXXX biçiminde yazılır; bu, kaynak dosya farklı kodlamayla kaydedilse bile harflerin bozulmamasını sağlar. Türkçe harflerin olduğu gibi kalmasını istiyorsanız "JSON / JavaScript" hedefini seçin.
Yapıştırdığım metin bir sunucuya gidiyor mu?
Hayır. Kaçırma ve çözme tamamen tarayıcınızda yapılır; API anahtarı, parola ya da müşteri verisi içeren bir JSON bile bu sayfadan çıkmaz. Sayfa açıldıktan sonra internet olmadan da çalışır.