JSON dize kaçışı, bir dize içindeki özel karakterleri JSON ayrıştırıcılarının yapıyı bozmadan okuyabileceği kaçış dizilerine dönüştürme işlemidir. JSON belirtimi (ECMA-404 / RFC 8259), dize değerleri içindeki belirli karakterlerin önüne ters eğik çizgi konulmasını zorunlu kılar. Doğru kaçış uygulanmadığında, dize içindeki gerçek bir çift tırnak veya satır sonu karakteri dizeyi erken sonlandırır ve ayrıştırma hatasına yol açar.
Her JSON dizesi çift tırnakla sınırlandırılır. Dizenin kendisi bir çift tırnak, ters eğik çizgi veya kontrol karakteri (U+0000 ile U+001F arası) içerdiğinde, bu karakterin kaçış dizisiyle değiştirilmesi gerekir. Örneğin gerçek bir satır sonu \n, sekme karakteri \t ve çift tırnak \" olur. Herhangi bir Unicode kod noktası, XXXX'in dört basamaklı onaltılık değer olduğu \uXXXX biçimiyle de temsil edilebilir.
Geri çözme (ters işlem), bu ters eğik çizgi dizilerini özgün karakterlere dönüştürür. Dize değerlerinin çift kaçışlı olduğu bir JSON yükü aldığınızda ya da bir JSON günlük girdisinden ham metni kullanıcı arayüzünde veya terminalde göstermek için çıkarmanız gerektiğinde kullanın. Günlük toplama hatları bu sorunla sürekli karşılaşır: JSON ile kodlanmış bir ileti başka bir JSON belgesinde dize değeri olarak saklandığında, iç dizedeki her ters eğik çizgi çift gelir.
Neden JSON Kaçış Aracı Kullanmalısınız?
Ters eğik çizgileri elle eklemek veya kaldırmak sıkıcı ve hata yapmaya açıktır; özellikle çok satırlı metinler, dosya yolları veya gömülü kod parçacıklarıyla çalışırken. Özel bir kaçış aracı, elle düzenlemenin gözden kaçırdığı uç durumları yakalar.
🔒
Gizlilik Öncelikli İşlem
Dizeleriniz tarayıcınızdan hiçbir zaman çıkmaz. Tüm kaçış ve geri çözme işlemleri sunucuya çağrı yapılmadan JavaScript ile yerel olarak çalışır; API anahtarları veya token'lar gibi hassas veriler makinenizde kalır.
⚡
Anında Dönüşüm
Herhangi bir metin yapıştırın ve milisaniyeler içinde doğru biçimde kaçırılmış JSON çıkışını alın. Uzak bir sunucuya gidiş-dönüş beklemenize gerek yok.
🛡️
Hesap veya Kurulum Gerekmez
Sayfayı açın ve kaçış uygulamaya başlayın. Kayıt formu, tarayıcı uzantısı veya yüklenecek CLI aracı yok. Modern tarayıcıya sahip her cihazda çalışır.
📋
Tam Karakter Kapsamı
JSON'ın zorunlu kıldığı tüm kaçışları işler: çift tırnak, ters eğik çizgi, kontrol karakterleri (U+0000 ile U+001F arası) ve emoji ile CJK karakterleri dahil Unicode dizileri.
JSON Dize Kaçışı Kullanım Senaryoları
Ön Yüz Geliştirme
fetch veya XMLHttpRequest aracılığıyla gönderilen bir JSON yüküne gömmeden önce kullanıcı tarafından üretilen içeriği kaçırın. Kullanıcılar tırnak, satır sonu veya emoji yazdığında hatalı biçimlenmiş istekleri önler.
Arka Uç API Çalışması
Dizeleri otomatik olarak kaçırmayan dillerde (kabuk betikleri, SQL saklı yordamları, şablon motorları) JSON yanıt gövdeleri oluşturun. Ham dizeyi yapıştırın, kaçırılmış sürümü kopyalayın.
DevOps ve Yapılandırma
JSON yapısını bozmadan Terraform, CloudFormation veya Kubernetes ConfigMap'leri için JSON yapılandırma dosyalarına çok satırlı sertifika PEM blokları, SSH anahtarları veya kabuk betikleri gömdürün.
QA ve Test
Sekme, null bayt, Unicode vekil çiftleri ve iç içe kaçırılmış dizeler gibi uç durum karakterleri içeren test fikstürleri oluşturun. Ayrıştırıcınızın bunları doğru işlediğini doğrulayın.
Veri Mühendisliği
Elasticsearch, CloudWatch veya Datadog'daki çift kaçırılmış günlük girdilerini temizleyin. Analiz veya yeniden alma için özgün iletiyi kurtarmak üzere dizeyi geri çözün.
JSON Öğrenme
JSON belirtimine göre hangi karakterlerin kaçış gerektirdiğini tam olarak görün. ECMA-404 üzerinde çalışan veya kendi JSON ayrıştırıcısını yazan öğrenciler için kullanışlıdır.
JSON Kaçış Dizisi Başvurusu
JSON belirtimi tam olarak iki zorunlu kaçış (çift tırnak ve ters eğik çizgi) ve yaygın kontrol karakterleri için altı kısa kaçış dizisi tanımlar. Diğer tüm kontrol karakterleri (U+0000 ile U+001F arası) \uXXXX biçimini kullanmak zorundadır. U+FFFF'nin üzerindeki karakterler (emoji gibi) UTF-16 vekil çifti olarak temsil edilebilir: \uD83D\uDE00.
Karakter
Açıklama
Kaçırılmış Biçim
"
Double quote
\"
\
Backslash
\\
/
Forward slash
\/ (optional)
\n
Newline (LF)
\n
\r
Carriage return
\r
\t
Tab
\t
\b
Backspace
\b
\f
Form feed
\f
U+0000–U+001F
Control characters
\u0000–\u001F
U+0080+
Non-ASCII (e.g. emoji)
\uXXXX or raw UTF-8
JSON Kaçışı ile JSON Kodlaması Karşılaştırması
Geliştiriciler bazen bir dizeyi kaçırmayı tam JSON belgesini kodlamayla karıştırır.
Dize Kaçışı
JSON dize değerinin içindeki metin üzerinde çalışır. Dizenin çift tırnaklar arasında geçerli kalması için özel karakterleri ters eğik çizgi dizileriyle değiştirir. Giriş: ham metin. Çıkış: kaçırılmış metin (geçerli JSON olması için hâlâ çevreleyen tırnaklara ihtiyaç duyar).
JSON Kodlaması (Serileştirme)
Tüm bir veri yapısını (nesneler, diziler, sayılar, boolean değerleri, null) JSON metin gösterimine dönüştürür. Dize kaçışı bu büyük sürecin bir adımıdır. Giriş: bir veri yapısı. Çıkış: tam bir JSON belgesi.
Kod Örnekleri
Her büyük dilde bunun için yerleşik işlevler vardır. JavaScript, Python, Go ve jq örnekleri:
JavaScript (browser / Node.js)
// JSON.stringify escapes a value and wraps it in quotes
JSON.stringify('Line 1\nLine 2') // → '"Line 1\\nLine 2"'
// To get just the inner escaped string (no surrounding quotes):
const escaped = JSON.stringify('She said "hello"').slice(1, -1)
// → 'She said \\"hello\\"'
// Parsing reverses the escaping
JSON.parse('"tabs\\tand\\nnewlines"') // → 'tabs\tand\nnewlines'
// Handling Unicode: emoji in JSON
JSON.stringify('Price: 5\u20ac') // → '"Price: 5\u20ac"' (raw euro sign)
Python
import json
# json.dumps escapes and quotes a string
json.dumps('Line 1\nLine 2') # → '"Line 1\\nLine 2"'
# Ensure ASCII: replace non-ASCII with \uXXXX sequences
json.dumps('Caf\u00e9', ensure_ascii=True) # → '"Caf\\u00e9"'
# Keep UTF-8 characters as-is (default in Python 3)
json.dumps('Caf\u00e9', ensure_ascii=False) # → '"Caf\u00e9"'
# Unescape by round-tripping through json.loads
json.loads('"She said \\"hello\\""') # → 'She said "hello"'
Go
package main
import (
"encoding/json"
"fmt"
)
func main() {
// json.Marshal escapes a Go string for JSON
raw := "Line 1\nLine 2\tindented"
b, _ := json.Marshal(raw)
fmt.Println(string(b))
// → "Line 1\nLine 2\tindented"
// Unescape with json.Unmarshal
var out string
json.Unmarshal([]byte(`"She said \"hello\""`), &out)
fmt.Println(out)
// → She said "hello"
}
CLI (jq)
# Escape a raw string into a JSON-safe value
echo 'Line 1
Line 2 with tab' | jq -Rs '.'
# → "Line 1\nLine 2\twith tab\n"
# Unescape a JSON string back to raw text
echo '"She said \"hello\""' | jq -r '.'
# → She said "hello"
Sıkça Sorulan Sorular
Bir JSON dizesinde hangi karakterler kaçırılmalıdır?
JSON belirtimi (RFC 8259), çift tırnak (\"), ters eğik çizgi (\\) ve U+0000'dan U+001F'ye kadar tüm kontrol karakterlerinin kaçırılmasını zorunlu kılar. İleri eğik çizgi (/) \/ olarak kaçırılabilir ancak bu isteğe bağlıdır. ASCII dışı metin ve emoji dahil diğer tüm Unicode karakterler, belge UTF-8 kodlamasını kullandığı sürece kaçırılmadan görünebilir.
JSON kaçışı ile JSON stringify arasındaki fark nedir?
JavaScript'teki JSON.stringify(), tüm bir JavaScript değerini JSON dizesine serileştirir; çevreleyen çift tırnakları ekler ve içindeki özel karakterleri kaçırır. JSON kaçışı ise özellikle özel karakterlerin ters eğik çizgi dizileriyle karakter düzeyinde değiştirilmesini ifade eder. JSON.stringify()'ı bir dize üzerinde çağırmak, serileştirme sürecinin bir parçası olarak kaçışı gerçekleştirir.
JSON'da satır sonunu nasıl kaçırırım?
Gerçek satır sonu karakterini (U+000A) iki karakterlik \n dizisiyle değiştirin. Benzer şekilde, satır başı (U+000D) \r olur. JSON.stringify() veya Python'daki json.dumps() kullanırsanız bu değiştirmeler otomatik olarak gerçekleşir.
JSON dizem neden çift kaçırılmış?
Çift kaçış, bir dize iki kez serileştirildiğinde oluşur. Örneğin JSON.stringify()'ı zaten kaçış dizileri içeren bir dize üzerinde çağırmak, ters eğik çizgileri tekrar kaçırır: \n, \\n olur. Bunu düzeltmek için yeniden serileştirmeden önce dizeyi JSON.parse() ile bir kez ayrıştırın ya da hattınızdaki gereksiz kodlama adımlarını kontrol edin.
JSON dizelerinde tek tırnak kullanabilir miyim?
Hayır. JSON belirtimi, tüm dize değerleri ve özellik adları için çift tırnak gerektirir. Tek tırnaklar geçerli JSON değildir ve ayrıştırma hatasına neden olur. Kaynak verileriniz tek tırnak içeriyorsa, tek tırnaklar JSON çift tırnaklı dizedeki olağan karakterler olduğundan kaçış uygulanmasına gerek yoktur.
Evet, JSON belgesi RFC 8259'un varsayılan ve önerilen kodlama olarak belirttiği UTF-8 ile kodlandığı sürece. Aksan işaretli harfler, CJK ideografları ve emoji, \uXXXX kaçışına gerek kalmadan doğrudan dizede görünebilir. Bazı eski sistemler yalnızca ASCII JSON bekler; bu durumda Python'daki ensure_ascii seçeneğini veya dilinizde benzer bir bayrağı kullanın.
JSON'da emoji nasıl kaçırırım?
U+FFFF'nin üzerindeki emojiler JSON'da UTF-16 vekil çifti kullanılarak temsil edilir. Örneğin gülen yüz (U+1F600) \uD83D\uDE00 olur. Çoğu serileştirici bunu otomatik olarak yapar. JSON'ı elle yazıyorsanız veya araçlarınız yalnızca Temel Çok Dilli Düzlem'i destekliyorsa vekil çift gösterimini kullanın. Aksi takdirde, emojiyi doğrudan UTF-8 karakteri olarak ekleyin.