JSON স্ট্রিং এস্কেপিং হলো সেই প্রক্রিয়া যেখানে একটি স্ট্রিংয়ের ভেতরের বিশেষ অক্ষরগুলোকে এমন এস্কেপ ক্রমে রূপান্তর করা হয় যা JSON পার্সার কাঠামো না ভেঙে পার্স করতে পারে। JSON স্পেসিফিকেশন (ECMA-404 / RFC 8259) অনুযায়ী স্ট্রিং মানের ভেতরে নির্দিষ্ট কিছু অক্ষরের আগে ব্যাকস্ল্যাশ ব্যবহার করা আবশ্যক। সঠিক এস্কেপিং ছাড়া স্ট্রিংয়ের ভেতরে সরাসরি ডবল কোট বা নতুন লাইনের অক্ষর থাকলে স্ট্রিং আগেই শেষ হয়ে যাবে এবং পার্স ত্রুটি দেখা দেবে।
প্রতিটি JSON স্ট্রিং ডবল কোট দিয়ে ঘেরা। যখন স্ট্রিংয়ের ভেতরেই ডবল কোট, ব্যাকস্ল্যাশ বা কোনো নিয়ন্ত্রণ অক্ষর (U+0000 থেকে U+001F) থাকে, সেই অক্ষরটিকে অবশ্যই তার এস্কেপ ক্রম দিয়ে প্রতিস্থাপন করতে হবে। যেমন, সরাসরি নতুন লাইন \n হয়, ট্যাব \t হয়, এবং ডবল কোট \" হয়। যেকোনো Unicode কোড পয়েন্টকে \uXXXX রূপেও প্রকাশ করা যায়, যেখানে XXXX চার অঙ্কের হেক্সাডেসিমেল মান।
আনএস্কেপিং (বিপরীত প্রক্রিয়া) সেই ব্যাকস্ল্যাশ ক্রমগুলোকে আবার মূল অক্ষরে ফিরিয়ে দেয়। এটি ব্যবহার করুন যখন আপনি এমন কোনো JSON পেলোড পান যেখানে স্ট্রিং মানগুলো দ্বিগুণভাবে এস্কেপ করা, অথবা যখন UI বা টার্মিনালে প্রদর্শনের জন্য JSON লগ এন্ট্রি থেকে কাঁচা পাঠ বের করতে হয়। লগ aggregation pipeline-এ এটি ঘন ঘন দেখা যায়: যখন একটি JSON-এনকোড করা বার্তা আরেকটি JSON দস্তাবেজের ভেতরে স্ট্রিং মান হিসেবে সংরক্ষিত হয়, তখন ভেতরের স্ট্রিংয়ের প্রতিটি ব্যাকস্ল্যাশ দ্বিগুণ হয়ে আসে।
JSON Escape টুল কেন ব্যবহার করবেন?
হাতে ব্যাকস্ল্যাশ যোগ বা বাদ দেওয়া ক্লান্তিকর এবং ত্রুটিপ্রবণ, বিশেষত বহু-লাইনের পাঠ, ফাইল পাথ বা এমবেড করা কোড খণ্ডের ক্ষেত্রে। একটি নির্দিষ্ট এস্কেপ টুল সেই edge case গুলো ধরে যা ম্যানুয়াল এডিটিংয়ে মিস হয়।
🔒
গোপনীয়তা-কেন্দ্রিক প্রসেসিং
আপনার স্ট্রিং কখনো ব্রাউজারের বাইরে যায় না। সমস্ত এস্কেপিং ও আনএস্কেপিং স্থানীয়ভাবে JavaScript-এ কোনো সার্ভার কল ছাড়াই চলে, তাই API কী বা টোকেনের মতো সংবেদনশীল তথ্য আপনার ডিভাইসেই থাকে।
⚡
তাৎক্ষণিক রূপান্তর
যেকোনো পাঠ পেস্ট করুন এবং মিলিসেকেন্ডের মধ্যে সঠিকভাবে এস্কেপ করা JSON আউটপুট পান। সার্ভারে রাউন্ড-ট্রিপের জন্য অপেক্ষা করতে হবে না।
🛡️
কোনো অ্যাকাউন্ট বা ইনস্টলেশন নেই
পেজ খুলুন এবং এস্কেপ শুরু করুন। কোনো নিবন্ধন ফর্ম নেই, কোনো ব্রাউজার এক্সটেনশন নেই, কোনো CLI টুল ইনস্টল করতে হবে না। যেকোনো আধুনিক ব্রাউজার আছে এমন ডিভাইসে কাজ করে।
📋
সম্পূর্ণ অক্ষর সমর্থন
সমস্ত JSON-নির্ধারিত এস্কেপ সামলায়: ডবল কোট, ব্যাকস্ল্যাশ, নিয়ন্ত্রণ অক্ষর (U+0000 থেকে U+001F), এবং ইমোজি ও CJK অক্ষরসহ Unicode ক্রম।
JSON স্ট্রিং এস্কেপের ব্যবহারের ক্ষেত্র
ফ্রন্টএন্ড ডেভেলপমেন্ট
fetch বা XMLHttpRequest-এর মাধ্যমে পাঠানো JSON পেলোডে এমবেড করার আগে ব্যবহারকারী-তৈরি বিষয়বস্তু এস্কেপ করুন। ব্যবহারকারী কোট, নতুন লাইন বা ইমোজি টাইপ করলে বিকৃত অনুরোধ রোধ করে।
ব্যাকএন্ড API কাজ
এমন ভাষায় JSON রেসপন্স বডি তৈরি করুন যেগুলো স্বয়ংক্রিয়ভাবে স্ট্রিং এস্কেপ করে না (শেল স্ক্রিপ্ট, SQL stored procedure, টেমপ্লেট ইঞ্জিন)। কাঁচা স্ট্রিং পেস্ট করুন, এস্কেপ করা সংস্করণ কপি করুন।
DevOps ও কনফিগারেশন
JSON কাঠামো না ভেঙে Terraform, CloudFormation বা Kubernetes ConfigMaps-এর JSON কনফিগ ফাইলে বহু-লাইনের সার্টিফিকেট PEM ব্লক, SSH কী বা শেল স্ক্রিপ্ট এমবেড করুন।
QA ও পরীক্ষা
প্রান্তিক অক্ষরযুক্ত পরীক্ষার ফিক্সচার তৈরি করুন: ট্যাব, নাল বাইট, Unicode সারোগেট জোড়া এবং নেস্টেড এস্কেপ স্ট্রিং। যাচাই করুন যে আপনার পার্সার সেগুলো সঠিকভাবে সামলায়।
ডেটা ইঞ্জিনিয়ারিং
Elasticsearch, CloudWatch বা Datadog থেকে দ্বিগুণ-এস্কেপ করা লগ এন্ট্রি পরিষ্কার করুন। বিশ্লেষণ বা পুনরায় ইনজেশনের জন্য মূল বার্তা পুনরুদ্ধার করতে স্ট্রিং আনএস্কেপ করুন।
JSON শেখা
JSON স্পেসিফিকেশন অনুযায়ী কোন অক্ষরগুলোর এস্কেপিং প্রয়োজন তা সরাসরি দেখুন। ECMA-404 পড়ছেন এমন শিক্ষার্থীদের বা নিজের JSON পার্সার তৈরি করছেন এমন ডেভেলপারদের জন্য উপকারী।
JSON Escape ক্রম রেফারেন্স
JSON স্পেসিফিকেশন ঠিক দুটি আবশ্যক এস্কেপ (ডবল কোট ও ব্যাকস্ল্যাশ) এবং সাধারণ নিয়ন্ত্রণ অক্ষরের জন্য ছয়টি সংক্ষিপ্ত এস্কেপ ক্রম নির্ধারণ করে। অন্য সব নিয়ন্ত্রণ অক্ষরের (U+0000 থেকে U+001F) জন্য \uXXXX রূপ ব্যবহার করতে হবে। U+FFFF-এর উপরের অক্ষর (যেমন ইমোজি) UTF-16 সারোগেট জোড়া হিসেবে প্রকাশ করা যায়: \uD83D\uDE00।
অক্ষর
বিবরণ
এস্কেপ রূপ
"
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 এস্কেপিং বনাম JSON এনকোডিং
ডেভেলপাররা কখনো কখনো একটি স্ট্রিং এস্কেপ করা এবং একটি সম্পূর্ণ JSON দস্তাবেজ এনকোড করার মধ্যে গুলিয়ে ফেলেন।
স্ট্রিং এস্কেপিং
JSON স্ট্রিং মানের ভেতরের পাঠে কাজ করে। বিশেষ অক্ষরগুলো ব্যাকস্ল্যাশ ক্রম দিয়ে প্রতিস্থাপন করে যাতে স্ট্রিং ডবল কোটের মধ্যে বৈধ থাকে। ইনপুট: কাঁচা পাঠ। আউটপুট: এস্কেপ করা পাঠ (বৈধ JSON হতে চারপাশে কোট প্রয়োজন)।
JSON এনকোডিং (সিরিয়ালাইজেশন)
একটি সম্পূর্ণ ডেটা কাঠামো (অবজেক্ট, অ্যারে, সংখ্যা, বুলিয়ান, নাল) কে JSON পাঠ উপস্থাপনায় রূপান্তর করে। স্ট্রিং এস্কেপিং এই বৃহত্তর প্রক্রিয়ার একটি ধাপ। ইনপুট: একটি ডেটা কাঠামো। আউটপুট: একটি সম্পূর্ণ 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 স্ট্রিংয়ে কোন অক্ষরগুলো অবশ্যই এস্কেপ করতে হবে?
JSON স্পেসিফিকেশন (RFC 8259) অনুযায়ী ডবল কোট (\"), ব্যাকস্ল্যাশ (\\) এবং U+0000 থেকে U+001F পর্যন্ত সব নিয়ন্ত্রণ অক্ষর এস্কেপ করা আবশ্যক। ফরওয়ার্ড স্ল্যাশ (/) কে \/ হিসেবে এস্কেপ করা যায়, তবে এটি ঐচ্ছিক। অন্য সব Unicode অক্ষর, নন-ASCII পাঠ ও ইমোজিসহ, বিনা এস্কেপিংয়ে থাকতে পারে যদি দস্তাবেজটি UTF-8 এনকোডিং ব্যবহার করে।
JSON escape ও JSON stringify-এর মধ্যে পার্থক্য কী?
JavaScript-এ JSON.stringify() একটি সম্পূর্ণ JavaScript মানকে JSON স্ট্রিংয়ে সিরিয়ালাইজ করে, চারপাশে ডবল কোট যোগ করে এবং ভেতরের বিশেষ অক্ষর এস্কেপ করে। JSON এস্কেপিং বিশেষভাবে অক্ষর-স্তরের প্রতিস্থাপন — বিশেষ অক্ষরগুলো ব্যাকস্ল্যাশ ক্রমে বদলানো — কে নির্দেশ করে। কোনো স্ট্রিংয়ে JSON.stringify() ডাকলে সিরিয়ালাইজেশনের অংশ হিসেবে এস্কেপিং হয়।
JSON-এ নতুন লাইন কীভাবে এস্কেপ করবেন?
সরাসরি নতুন লাইনের অক্ষর (U+000A) কে দুই-অক্ষরের ক্রম \n দিয়ে প্রতিস্থাপন করুন। একইভাবে, ক্যারিজ রিটার্ন (U+000D) \r হয়। JSON.stringify() বা Python-এ json.dumps() ব্যবহার করলে এই প্রতিস্থাপন স্বয়ংক্রিয়ভাবে হয়।
আমার JSON স্ট্রিং দ্বিগুণভাবে এস্কেপ হয়ে যাচ্ছে কেন?
দ্বিগুণ এস্কেপিং তখন হয় যখন একটি স্ট্রিং দুবার সিরিয়ালাইজ করা হয়। যেমন, ইতোমধ্যে এস্কেপ ক্রম আছে এমন স্ট্রিংয়ে JSON.stringify() ডাকলে ব্যাকস্ল্যাশগুলো আবার এস্কেপ হবে: \n হয়ে যাবে \\n। এটি ঠিক করতে পুনরায় সিরিয়ালাইজের আগে JSON.parse() দিয়ে একবার পার্স করুন, অথবা পাইপলাইনে অপ্রয়োজনীয় এনকোডিং ধাপ পরীক্ষা করুন।
JSON স্ট্রিংয়ে একক কোট ব্যবহার করা যায় কি?
না। JSON স্পেসিফিকেশন সব স্ট্রিং মান ও প্রপার্টির নামের জন্য ডবল কোট আবশ্যক করে। একক কোট বৈধ JSON নয় এবং পার্স ত্রুটি ঘটাবে। আপনার উৎস ডেটায় একক কোট থাকলে, JSON ডবল-কোট স্ট্রিংয়ের ভেতরে সেগুলো এস্কেপ করার প্রয়োজন নেই কারণ সেই প্রসঙ্গে একক কোট সাধারণ অক্ষর।
JSON-এ বিনা এস্কেপে UTF-8 অক্ষর রাখা কি নিরাপদ?
হ্যাঁ, যদি JSON দস্তাবেজটি UTF-8-এ এনকোড হয়, যা RFC 8259 ডিফল্ট ও প্রস্তাবিত এনকোডিং হিসেবে নির্ধারণ করে। উচ্চারণ চিহ্নযুক্ত অক্ষর, CJK আদর্শলিপি এবং ইমোজি \uXXXX এস্কেপিং ছাড়াই স্ট্রিংয়ে সরাসরি থাকতে পারে। কিছু পুরনো সিস্টেম কেবল ASCII JSON আশা করে; সেক্ষেত্রে Python-এ ensure_ascii বিকল্প বা আপনার ভাষায় সমতুল্য পতাকা ব্যবহার করুন।
JSON-এ ইমোজি কীভাবে এস্কেপ করবেন?
U+FFFF-এর উপরের ইমোজি JSON-এ UTF-16 সারোগেট জোড়া ব্যবহার করে প্রকাশ করা হয়। যেমন, হাসিমুখ (U+1F600) হয় \uD83D\uDE00। অধিকাংশ সিরিয়ালাইজার এটি স্বয়ংক্রিয়ভাবে সামলায়। আপনি হাতে JSON লিখলে বা আপনার টুল কেবল Basic Multilingual Plane সমর্থন করলে, সারোগেট জোড়ার নোটেশন ব্যবহার করুন। অন্যথায় ইমোজিকে সরাসরি UTF-8 অক্ষর হিসেবে অন্তর্ভুক্ত করুন।