JSON স্ট্রিং এস্কেপ / আনএস্কেপ
JSONJSON স্ট্রিং এস্কেপ এবং আনএস্কেপ — উদ্ধৃতি, কন্ট্রোল অক্ষর এবং \uXXXX।
এই পৃষ্ঠায়
JSON স্ট্রিং এস্কেপিং কী?#
একটি JSON নথির ভেতরে একটি স্ট্রিংকে অবশ্যই দ্বি-উদ্ধৃতির মধ্যে থাকতে হয় — এবং টেক্সটে নিজেই একটি উদ্ধৃতি, একটি নিউলাইন, বা একটি ব্যাকস্ল্যাশ থাকলেই সমস্যা তৈরি হয়। এগুলোকে সরাসরি ঢুকিয়ে দিলে পার্সার হয় অনেক আগেই ক্লোজিং উদ্ধৃতি দেখে, অথবা \-কে এমন একটি এস্কেপের সূচনা হিসেবে গ্রহণ করে যা সে বোঝে না। এস্কেপিং হলো সেই অক্ষরগুলোকে JSON স্পেসিফিকেশনে সংজ্ঞাত ছোট ব্যাকস্ল্যাশ ক্রম দিয়ে প্রতিস্থাপন: উদ্ধৃতির জন্য \", ব্যাকস্ল্যাশের জন্য \, নিউলাইনের জন্য \n, ট্যাবের জন্য \t, এবং আরও কয়েকটি। আনএস্কেপিং হলো এর বিপরীত — সেই ক্রমগুলোকে আবার মূল অক্ষরে ফিরিয়ে আনা।
একটি দ্বিতীয়, কঠিনতর মোড আছে। কিছু লিগেসি সিস্টেম — পুরোনো লগ শিপার, কঠোর ডেটাবেস, বিশুদ্ধ ASCII ধরে নেওয়া ট্রানজিট স্তর — ১২৭-এর বেশি প্রতিটি বাইটে আটকে যায়। তাদের জন্য, JSON আপনাকে যেকোনো নন-ASCII অক্ষরকে \uXXXX হিসেবে লিখতে দেয় (এবং ইমোজির মতো অ্যাস্ট্রাল অক্ষরকে UTF-16 সারোগেট জোড় হিসেবে)। টেক্সটটি এখনও বৈধ JSON; এস্কেপ করার পর শুধু এটি সম্পূর্ণভাবে ASCII দিয়ে তৈরি হয়ে যায়।
এই পৃষ্ঠাটি উভয় দিক এবং উভয় মোড সম্পন্ন করে: একটি সরাসরি স্ট্রিংকে বৈধ JSON স্ট্রিং লিটারেলে এস্কেপ করুন, অথবা একটি লিটারেলকে তার মূল টেক্সটে আনএস্কেপ করুন — একটি ঐচ্ছিক শুধু ASCII আউটপুট সুইচ সহ যা প্রতিটি নন-ASCII কোড পয়েন্টকে \uXXXX রূপে বাধ্য করে।
ব্যবহারবিধি#
- টুলবারের উপরের বাম কোণার এনকোড / ডিকোড টগল দিয়ে দিক নির্বাচন করুন। এনকোড সরাসরি টেক্সটকে JSON লিটারেলে এস্কেপ করে; ডিকোড একটি লিটারেলকে টেক্সটে ফিরিয়ে আনে।
- বাঁদিকের ইনপুট পেইনে টাইপ করুন বা পেস্ট করুন।
- এনকোড-এ, পুরো টেক্সটটি একটি JSON স্ট্রিং লিটারেল হয়ে যায় (চারপাশের উদ্ধৃতি সহ)।
- ডিকোড-এ, আপনি হয় একটি উদ্ধৃতিযুক্ত লিটারেল (
"a\nb") অথবা শুধু এস্কেপ করা বডি (a\nb) পেস্ট করতে পারেন — টুলটি আপনার জন্য তা উদ্ধৃতিতে মুড়ে দেয়। একটি বৈধ JSON সংখ্যা, বুলিয়ান, বা অবজেক্টকে “স্ট্রিং নয়” হিসেবে প্রত্যাখ্যান করা হয়, নীরবে রূপান্তরের বদলে।
- যখন ডাউনস্ট্রিম কনজিউমার নন-ASCII বাইট সামলাতে পারে না, তখন (এনকোড মোডে) শুধু ASCII আউটপুট (\uXXXX) টিক দিন। ইমোজির মতো অ্যাস্ট্রাল অক্ষর ঠিক যেমন
JSON.stringifyকরত, তেমনই একটি সঠিক সারোগেট জোড় হিসেবে নির্গত হয়। - ফলাফল আউটপুট পেইনে লাইভ উপস্থিত হয়। নেওয়ার জন্য কপি ক্লিক করুন।
- নমুনা একটি বহুভাষিক প্রদর্শন স্ট্রিং ফেলে দেয়; মুছুন উভয় পেইন রিসেট করে।
মূল বৈশিষ্ট্য#
- স্পেক-নির্ভুল শর্ট ফর্ম। ঠিক সেই ক্রমগুলো ব্যবহার করে যা RFC 8259 প্রয়োজন (
\",\,\b,\f,\n,\r,\t) এবং 0x20-এর নিচের বাকি সবকিছুর জন্য\uXXXX—JSON.stringify-এর সাথে বাইট-ফর-বাইট মিলে যায়। - প্রকৃত শুধু-ASCII মোড। নন-ASCII অক্ষরগুলো নীরবে বাদ দেওয়া বা মোজিবাকে পরিণত হয় না; প্রতিটি
\uXXXXহিসেবে নির্গত হয়, এবং অ্যাস্ট্রাল অক্ষর (U+FFFF-এর উপরে) একটি সঠিক UTF-16 সারোগেট জোড়ে পরিণত হয়, এমন কোনো ভাঙা একক কোড ইউনিটে নয় যা ডিকোডার প্রত্যাখ্যান করবে। - সহনশীল আনএস্কেপ। একটি সম্পূর্ণ উদ্ধৃতিযুক্ত লিটারেল এবং একটি খালি এস্কেপ করা বডি উভয়ই গ্রহণ করে, তাই একটি লগ লাইন থেকে অর্ধ-পেস্ট করা খণ্ডও ত্রুটি না দিয়ে ডিকোড হয়।
- অনুমান করতে অস্বীকার। যদি ডিকোড করা ইনপুটটি বৈধ JSON হয় কিন্তু স্ট্রিং না হয় (যেমন একটি খালি সংখ্যা বা অ্যারে), তবে টুলটি আপনার পেছনে সেটি স্ট্রিং-এ রূপান্তর না করে আপনাকে জানায়।
ব্যবহারিক উদাহরণ#
এনকোড মোডে নমুনা লোড করুন এবং ইনপুট হলো এমন একটি স্ট্রিং যা উদ্ধৃতি, একটি ব্যাকস্ল্যাশ পাথ, একটি নিউলাইন, একটি কপিরাইট চিহ্ন, একটি ইমোজি, এবং চীনা অক্ষর ইচ্ছাকৃতভাবে মিশ্রিত করে:
He said "hi"
\path\ © 🌍 你好
শুধু ASCII ছাড়া, এস্কেপ করা লিটারেলটি পঠনযোগ্য অক্ষরগুলো আক্ষরিকভাবে রাখে এবং শুধু যা উদ্ধৃত হতে হবে তা উদ্ধৃত করে:
"He said \"hi\"\n\\path\\ © 🌍 你好"
এখন শুধু ASCII আউটপুট (\uXXXX) টিক দিন এবং একই ইনপুট বিশুদ্ধ ASCII হয়ে যায় — কপিরাইট চিহ্নটি চার-অক্ষর রূপ \u00a9-এ কুণ্ডলিত হয়, গ্লোব ইমোজিটি সারোগেট জোড় \ud83c\udf0d-এ, এবং প্রতিটি চীনা অক্ষর তার নিজস্ব কোড পয়েন্টে (\u4f60, \u597d):
"He said \"hi\"\n\\path\\ \u00a9 \ud83c\udf0d \u4f60\u597d"
ডিকোড-এ স্যুইচ করুন এবং ঐ লিটারেলগুলোর যেকোনো একটি ফিরিয়ে পেস্ট করুন: ইমোজি ও চীনা অক্ষরসহ মূল টেক্সটটি হুবহু পুনরুদ্ধার হয়।
প্রশ্নোত্তর#
ইমোজি কেন একটির বদলে দুটি \u কোডে পরিণত হয়?#
U+FFFF-এর উপরের অক্ষরগুলো (ইমোজি, বিরল CJK এক্সটেনশন, কিছু গাণিতিক প্রতীক) একটি একক ১৬-বিট কোড ইউনিটে ধরে না, তাই UTF-16 সেগুলোকে একটি সারোগেট জোড় হিসেবে উপস্থাপন করে — একটি উচ্চ সারোগেটের পর একটি নিম্ন সারোগেট। গ্লোব ইমোজি 🌍 (U+1F30D) হয়ে যায় \ud83c\udf0d। শুধু একটি \u নির্গত করলে এমন JSON তৈরি হতো যা কঠোর ডিকোডার প্রত্যাখ্যান করে; এই টুলটি ঠিক যেমন JSON.stringify করে জোড়টি নির্গত করে, তাই আউটপুট রাউন্ড-ট্রিপ করে।
ডিকোড বলছে “ইনপুটটি JSON স্ট্রিং নয়।” আমি কী পেস্ট করেছি?#
আপনি এমন কিছু পেস্ট করেছেন যা বৈধ JSON কিন্তু স্ট্রিং নয় — সাধারণত একটি খালি সংখ্যা (42), একটি বুলিয়ান (true), বা একটি অবজেক্ট/অ্যারে। টুলটি তা স্ট্রিং-এ রূপান্তর করতে অস্বীকার করে কারণ তাতে একটি প্রকৃত ভুল লুকিয়ে যেত (আপনি সম্ভবত স্ট্রিং মানটি পেস্ট করতে চেয়েছিলেন, পুরো নথিটি নয়)। আপনার টেক্সটকে উদ্ধৃতিতে মুড়ে আবার চেষ্টা করুন।
এটি কি আক্ষরিক ট্যাব বা বেলের মতো কন্ট্রোল অক্ষর সামলায়?#
হ্যাঁ। ইনপুটের একটি আক্ষরিক ট্যাব \t হয়, একটি ব্যাকস্পেস \b, একটি ফর্ম ফিড \f, একটি ক্যারেজ রিটার্ন \r; U+0020-এর নিচের অন্য যেকোনো কন্ট্রোল কোড (বেল 0x07 সহ) একটি \u0007-স্টাইলের কোডে পরিণত হয়। এটি গুরুত্বপূর্ণ কারণ JSON স্ট্রিংয়ের ভেতরে সরাসরি কন্ট্রোল অক্ষর অবৈধ এবং কিছু পার্সার সরাসরি সেগুলো প্রত্যাখ্যান করে।
শুধু-ASCII আউটপুট কি “বেশি নিরাপদ”?#
শুধুমাত্র একটি নির্দিষ্ট ধরনের নিরাপত্তার জন্য: এমন একটি ট্রানজিট স্তর বেঁচে থাকা যা নন-ASCII বাইট বিকৃত বা প্রত্যাখ্যান করে। এটি কোনো নিরাপত্তা ব্যবস্থা নয় — ডেটা এখনও স্পষ্টভাবে উল্টোদিকে ফেরানো যায়, শুধু আরও সীমাবদ্ধ একটি অক্ষরমালায় প্রকাশ করা হয়েছে। কনজিউমার যখন ASCII দাবি করে তখনই এটি ব্যবহার করুন; অন্যথায় বন্ধ রাখুন, কারণ পঠনযোগ্য রূপটি ডিবাগ করা অনেক সহজ।