Escape رشته JSON فرآیند تبدیل کاراکترهای خاص درون یک رشته به دنبالههای escape است که تجزیهکنندههای JSON میتوانند بدون شکستن ساختار آنها را بخوانند. مشخصات JSON (ECMA-404 / RFC 8259) الزام میکند که برخی کاراکترها درون مقادیر رشتهای با یک بکاسلش شروع شوند. بدون escape مناسب، یک دوتاقول واقعی یا خط جدید درون یک رشته، آن را زودتر از موعد پایان میدهد و خطای تجزیه ایجاد میکند.
هر رشته JSON با دوتاقول محصور میشود. وقتی رشته خودش حاوی دوتاقول، بکاسلش، یا یک کاراکتر کنترلی (U+0000 تا U+001F) باشد، باید با دنباله escape جایگزین شود. برای مثال، یک خط جدید واقعی به \n تبدیل میشود، تب به \t، و دوتاقول به \". هر نقطه کد یونیکد را میتوان به صورت \uXXXX نمایش داد که XXXX مقدار هگزادسیمال چهاررقمی است.
Unescape (عملیات معکوس) آن دنبالههای بکاسلش را به کاراکترهای اصلی تبدیل میکند. از آن استفاده کنید وقتی پیلود JSON دریافت میکنید که مقادیر رشتهای آن دوبار escape شدهاند، یا وقتی میخواهید متن خام را از یک ورودی لاگ JSON برای نمایش در رابط کاربری یا ترمینال استخراج کنید. پایپلاینهای تجمیع لاگ دائماً با این مشکل مواجه میشوند: وقتی یک پیام JSON-encoded به عنوان مقدار رشتهای درون یک سند JSON دیگری ذخیره میشود، هر بکاسلش در رشته داخلی دوتایی میشود.
چرا از ابزار JSON Escape استفاده کنیم؟
افزودن یا حذف دستی بکاسلشها خستهکننده و مستعد خطاست، بهخصوص هنگام کار با متن چندخطی، مسیرهای فایل، یا قطعهکدهای تعبیهشده. یک ابزار تخصصی escape موارد حاشیهای را که ویرایش دستی نادیده میگیرد شناسایی میکند.
🔒
پردازش با اولویت حریم خصوصی
رشتههای شما هرگز مرورگر را ترک نمیکنند. تمام escape و unescape به صورت محلی در JavaScript اجرا میشود و هیچ فراخوانی سروری وجود ندارد، بنابراین دادههای حساس مانند کلیدهای API یا توکنها روی دستگاه شما باقی میمانند.
⚡
تبدیل فوری
هر متنی را paste کنید و خروجی JSON escape-شده را در میلیثانیه دریافت کنید. نیازی به انتظار برای رفتوبرگشت به سرور راهدور نیست.
🛡️
بدون ثبتنام یا نصب
صفحه را باز کنید و شروع کنید. بدون فرم ثبتنام، بدون افزونه مرورگر، بدون ابزار CLI برای نصب. روی هر دستگاهی با مرورگر مدرن کار میکند.
📋
پوشش کامل کاراکترها
تمام escapeهای الزامی JSON را پوشش میدهد: دوتاقول، بکاسلش، کاراکترهای کنترلی (U+0000 تا U+001F)، و دنبالههای یونیکد شامل ایموجی و کاراکترهای CJK.
موارد استفاده JSON String Escape
توسعه فرانتاند
محتوای تولیدشده توسط کاربر را قبل از تعبیه در یک پیلود JSON ارسالشده از طریق fetch یا XMLHttpRequest escape کنید. وقتی کاربران دوتاقول، خط جدید یا ایموجی تایپ میکنند، از درخواستهای ناقص جلوگیری میکند.
کار با API بکاند
بدنههای پاسخ JSON را در زبانهایی که رشتهها را بهصورت خودکار escape نمیکنند بسازید (اسکریپتهای shell، stored procedureهای SQL، موتورهای قالب). رشته خام را paste کنید، نسخه escape-شده را کپی کنید.
DevOps و پیکربندی
بلوکهای PEM گواهینامه چندخطی، کلیدهای SSH، یا اسکریپتهای shell را بدون شکستن ساختار JSON در فایلهای پیکربندی JSON برای Terraform، CloudFormation، یا ConfigMapهای Kubernetes تعبیه کنید.
QA و تست
فیکسچرهای آزمون حاوی کاراکترهای حاشیهای بسازید: تب، بایت null، جفتهای surrogate یونیکد، و رشتههای escape-شده تودرتو. تأیید کنید که تجزیهکننده شما آنها را به درستی مدیریت میکند.
مهندسی داده
ورودیهای لاگ دوبار-escape-شده را از Elasticsearch، CloudWatch، یا Datadog پاکسازی کنید. رشته را unescape کنید تا پیام اصلی را برای تحلیل یا بازوارد کردن بازیابی کنید.
یادگیری JSON
دقیقاً ببینید کدام کاراکترها طبق مشخصات JSON نیاز به escape دارند. برای دانشجویانی که با ECMA-404 کار میکنند یا تجزیهکننده JSON خود را میسازند مفید است.
مرجع دنبالههای Escape JSON
مشخصات JSON دقیقاً دو escape اجباری (دوتاقول و بکاسلش) و شش دنباله escape کوتاه برای کاراکترهای کنترلی رایج تعریف میکند. تمام کاراکترهای کنترلی دیگر (U+0000 تا U+001F) باید از فرم \uXXXX استفاده کنند. کاراکترهای بالاتر از U+FFFF (مانند ایموجی) میتوانند به صورت یک جفت surrogate UTF-16 نمایش داده شوند: \uD83D\uDE00.
کاراکتر
توضیح
فرم escape-شده
"
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 Escaping و JSON Encoding
توسعهدهندگان گاهی escape کردن یک رشته را با encoding یک سند JSON کامل اشتباه میگیرند.
Escape رشته
روی متن درون یک مقدار رشته JSON عمل میکند. کاراکترهای خاص را با دنبالههای بکاسلش جایگزین میکند تا رشته درون دوتاقول معتبر بماند. ورودی: متن خام. خروجی: متن escape-شده (برای معتبر بودن در JSON هنوز نیاز به دوتاقول اطراف دارد).
JSON Encoding (سریالایزیشن)
یک ساختار داده کامل (آبجکتها، آرایهها، اعداد، مقادیر boolean، null) را به یک نمایش متنی JSON تبدیل میکند. Escape رشته یک مرحله درون این فرآیند بزرگتر است. ورودی: یک ساختار داده. خروجی: یک سند JSON کامل.
نمونههای کد
هر زبان اصلی توابع داخلی برای این کار دارد. نمونهها در JavaScript، Python، Go، و jq:
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"
سوالات متداول
کدام کاراکترها باید در رشته JSON escape شوند؟
مشخصات JSON (RFC 8259) الزام میکند دوتاقول (\")، بکاسلش (\\)، و تمام کاراکترهای کنترلی از U+0000 تا U+001F escape شوند. اسلش رو به جلو (/) میتواند به صورت \/ escape شود اما اختیاری است. تمام کاراکترهای یونیکد دیگر، از جمله متن غیر-ASCII و ایموجی، میتوانند بدون escape ظاهر شوند به شرطی که سند از رمزگذاری UTF-8 استفاده کند.
تفاوت JSON escape و JSON stringify چیست؟
JSON.stringify() در JavaScript یک مقدار JavaScript کامل را به یک رشته JSON سریالایز میکند، دوتاقول اطراف را اضافه میکند و کاراکترهای خاص داخل را escape میکند. JSON escaping بهطور خاص به جایگزینی کاراکترهای خاص با دنبالههای بکاسلش در سطح کاراکتر اشاره دارد. فراخوانی JSON.stringify() روی یک رشته، escaping را به عنوان بخشی از فرآیند سریالایزیشن انجام میدهد.
چطور یک خط جدید را در JSON escape کنم؟
کاراکتر خط جدید تحتاللفظی (U+000A) را با دنباله دو-کاراکتری \n جایگزین کنید. به همین ترتیب، carriage return (U+000D) به \r تبدیل میشود. اگر از JSON.stringify() یا json.dumps() در Python استفاده کنید، این جایگزینیها بهصورت خودکار انجام میشوند.
چرا رشته JSON من دوبار escape شده است؟
دوبار-escaping زمانی رخ میدهد که یک رشته دوبار سریالایز میشود. برای مثال، فراخوانی JSON.stringify() روی رشتهای که از قبل حاوی دنبالههای escape است، بکاسلشها را دوباره escape میکند: \n به \\n تبدیل میشود. برای رفع این مشکل، رشته را یک بار با JSON.parse() تجزیه کنید قبل از سریالایز مجدد، یا پایپلاین خود را از نظر مراحل رمزگذاری اضافه بررسی کنید.
آیا میتوانم از تکنقلقول در رشتههای JSON استفاده کنم؟
خیر. مشخصات JSON دوتاقول را برای تمام مقادیر رشتهای و نامهای خاصیت الزامی میکند. تکنقلقول JSON معتبر نیست و باعث خطای تجزیه میشود. اگر داده منبع شما حاوی تکنقلقول است، نیازی به escape آنها درون یک رشته JSON با دوتاقول نیست چون تکنقلقول در آن زمینه کاراکتر معمولی است.
آیا قرار دادن کاراکترهای UTF-8 escape-نشده در JSON امن است؟
بله، تا زمانی که سند JSON با UTF-8 رمزگذاری شده باشد که RFC 8259 آن را به عنوان رمزگذاری پیشفرض و توصیهشده مشخص میکند. کاراکترهایی مانند حروف با علائم تلفظی، کاراکترهای ایدهآوگرافیک CJK، و ایموجی میتوانند مستقیماً در رشته ظاهر شوند بدون escape \uXXXX. برخی سیستمهای قدیمی انتظار JSON تنها با ASCII دارند؛ در آن صورت از گزینه ensure_ascii در Python یا پرچم مشابه در زبان خود استفاده کنید.
چطور ایموجی را در JSON escape کنم؟
ایموجیهای بالاتر از U+FFFF در JSON با یک جفت surrogate UTF-16 نمایش داده میشوند. برای مثال، صورت خندان (U+1F600) به \uD83D\uDE00 تبدیل میشود. اکثر سریالایزرها این کار را بهصورت خودکار انجام میدهند. اگر JSON را دستی مینویسید یا ابزار شما فقط از Basic Multilingual Plane پشتیبانی میکند، از نمادگذاری جفت surrogate استفاده کنید. در غیر این صورت، ایموجی را مستقیماً به عنوان کاراکتر UTF-8 وارد کنید.