Skip to content
JSON Escape / Unescape
Tools

JSON Escape / Unescape

নতুন

কাঁচা টেক্সটকে JSON-নিরাপদ স্ট্রিংয়ে escape করুন এবং আবার unescape করুন।

Options
0 input chars 0 output chars 0 output bytes

Runs entirely in your browser. Nothing is uploaded.

JSON এস্কেপ ও আনএস্কেপ অনলাইন — ফ্রি, প্রাইভেট, তাৎক্ষণিক

এই JSON এস্কেপ টুল যেকোনো টেক্সটকে একটি JSON-সেফ স্ট্রিংয়ে পরিণত করে এবং এস্কেপ করা স্ট্রিংকে আবার সাদামাটা টেক্সটে ফিরিয়ে দেয় — উভয় দিক এক জায়গায়, তাৎক্ষণিকভাবে, এবং সম্পূর্ণভাবে আপনার ব্রাউজারে। আপনার কনটেন্ট পেস্ট করুন, Escape বা Unescape বেছে নিন, এবং ফলাফল কপি করুন। ইনস্টল করার কিছু নেই, সাইনআপের কিছু নেই। প্রতিটি কনভার্শন স্থানীয়ভাবে চলে বলে, আপনার ডেটা কখনও আপনার ডিভাইস ছেড়ে যায় না — API পেলোড, অ্যাক্সেস টোকেন, পাসওয়ার্ড এবং সার্ভারে আপলোড করতে চান না এমন যেকোনো গোপনীয় টেক্সটের জন্য নিরাপদ।

এটি একটি API পেলোডের জন্য একটি JSON স্ট্রিং এস্কেপ করার, একটি কনফিগ ফাইলে একটি মাল্টি-লাইন স্নিপেট ফেলার, বা একটি লগে পাওয়া একটি এস্কেপড মান থেকে মূল টেক্সট পুনরুদ্ধার করার দ্রুততম উপায়। কনভার্শনটি ব্রাউজারের নেটিভ JSON ইঞ্জিন ব্যবহার করে — হাতে-লেখা রেজেক্স নয় — তাই আউটপুট ঠিক তাই যা জাভাস্ক্রিপ্টে JSON.stringify তৈরি করে এবং Python, Go, Java ও Ruby জুড়ে প্রতিটি স্পেক-সম্মত পার্সার যা প্রত্যাশা করে তার সাথে মেলে।

JSON-এ কী এস্কেপ প্রয়োজন — এবং কী প্রয়োজন নেই

একটি JSON স্ট্রিংয়ের ভেতরে শুধু অক্ষরের একটি ছোট সেটের বিশেষ অর্থ থাকে। ডাবল কোট "-কে \" হতে হবে, ব্যাকস্ল্যাশ \-কে \\ হতে হবে, এবং হোয়াইটস্পেস কন্ট্রোল অক্ষরগুলো \b, \f, \n, \r এবং \t হয়ে যায়। U+0020-এর নিচে বাকি যেকোনো কন্ট্রোল অক্ষর একটি \uXXXX এস্কেপ হিসেবে লেখা হয়। বাকি সবকিছু — অক্ষর, সংখ্যা, একক কোট, হাইফেন, এবং সাধারণ যতিচিহ্ন — অক্ষত থেকে যায়। এটি একটি সাধারণ বিভ্রান্তির উৎস: JSON-এ একক কোট এস্কেপ করার প্রয়োজন নেই কারণ JSON স্ট্রিং ডিলিমিটার হিসেবে ডাবল কোট ব্যবহার করে, একক কোট কখনও নয়।

এগুলোর কোনো একটি ভুল হওয়াই কেন JSON পার্স হতে ব্যর্থ হয় তার কারণ। একটি এস্কেপ না করা ডাবল কোট স্ট্রিং তাড়াতাড়ি শেষ করে দেয়, একটি "Unexpected token" এরর সৃষ্টি করে। একটি একক ব্যাকস্ল্যাশ একটি এস্কেপ সিকোয়েন্সের শুরু হিসেবে পড়া হয় — পরের অক্ষরটি একটি বৈধ এস্কেপ অক্ষর না হলে, পার্স ব্যর্থ হয়। একটি স্ট্রিংয়ের ভেতরে একটি আক্ষরিক নিউলাইন স্পেক দ্বারা সহজভাবে অনুমোদিত নয়। ভাঙা মানটি Escape মোডে পেস্ট করুন এবং টুলটি এক সেকেন্ডেরও কম সময়ে একটি সঠিকভাবে এস্কেপ করা সংস্করণ ফেরত দেবে।

এস্কেপ, আনএস্কেপ, স্ট্রিংগিফাই — প্রতিটি মোড কী করে

Escape মোড আপনার টেক্সটকে এনকোড করে যাতে এটি একটি JSON স্ট্রিংয়ের ভেতরে থাকতে পারে। ডিফল্টভাবে আপনি শুধু এস্কেপ করা কনটেন্ট পান, আপনার নিজের কোটের মধ্যে পেস্ট করার জন্য প্রস্তুত; Wrap in quotes চালু করুন এবং আপনি একটি সম্পূর্ণ কোটেড JSON স্ট্রিং মান পাবেন — ঠিক যা JSON.stringify() তৈরি করে। এটিই এস্কেপিং (বিশেষ অক্ষর এনকোড করা) এবং স্ট্রিংগিফাইং-এর (এনকোড করে কোটে মোড়ানো) মধ্যে পার্থক্য। উভয়ই এমন আউটপুট তৈরি করে যা প্রতিটি স্ট্যান্ডার্ড JSON পার্সার গ্রহণ করবে।

Unescape মোড উল্টো করে, \", \\, \n, \t এবং \uXXXX-কে আবার তারা যে অক্ষর প্রতিনিধিত্ব করে তাতে ব্যাখ্যা করে। এটি চারপাশের কোট সহ বা ছাড়া ইনপুট গ্রহণ করে এবং ত্রুটিপূর্ণ এস্কেপে একটি পরিষ্কার এরর রিপোর্ট করে। Swap বাটন বিপরীত মোডের অধীনে আউটপুটকে ইনপুটে ফিরিয়ে দেয়, তাই রাউন্ড-ট্রিপিং এক ক্লিকে হয় — কিছু এস্কেপ করুন, আউটপুট যাচাই করুন, সোয়াপ করুন, এবং নিশ্চিত করুন আপনি মূল টেক্সট ফিরে পাচ্ছেন।

ইউনিকোড, ব্যাকস্ল্যাশ, Windows পাথ, এবং HTML-সেফ আউটপুট

JSON ডিফল্টভাবে ইউনিকোড কাঁচা UTF-8 হিসেবে সংরক্ষণ করে, কিন্তু কখনও কখনও আপনার বিশুদ্ধ ASCII প্রয়োজন। Escape non-ASCII (\uXXXX) চালু করুন এবং প্রতিটি উচ্চারিত অক্ষর বা ইমোজি একটি \uXXXX সিকোয়েন্স হয়ে যায় — é হয়ে যায় \u00e9 এবং 😀 হয়ে যায় সারোগেট জোড়া \ud83d\ude00। এটি কোনো ডেটা হারানো ছাড়াই পুরোনো পার্সার এবং ASCII-শুধু কনফিগ ফাইলগুলোকে সঠিকভাবে কাজ করতে দেয়।

Windows ফাইল পাথ এবং রেজেক্স প্যাটার্নের জন্য, ব্যাকস্ল্যাশ ডাবলিং স্বয়ংক্রিয়: C:\Users\me পেস্ট করুন এবং টুলটি C:\\Users\\me আউটপুট দেয়। HTML এম্বেডিংয়ের জন্য, Escape forward slashes অপশন /-কে \/-এ পুনরায় লেখে যাতে একটি স্ট্রিং মানের ভেতরে একটি ক্লোজিং স্ক্রিপ্ট ট্যাগ চারপাশের HTML থেকে বাইরে বেরিয়ে যেতে না পারে — এখনও বৈধ JSON যা অভিন্নভাবে পার্স হয়, কিন্তু একটি সার্ভার-রেন্ডার করা পাতায় ইনলাইন করা নিরাপদ। JSONLint-এর মতো টুল ডিপ্লয় করার আগে এস্কেপ করা আউটপুট বৈধ কিনা তা নিশ্চিত করতে পারে।

এটি JSONLint, jsonformatter.org, VS Code, এবং সার্ভার-সাইড টুলের সাথে কীভাবে তুলনীয়

JSONLint যাচাই করে একটি সম্পূর্ণ JSON ডকুমেন্ট সুগঠিত কিনা। jsonformatter.org পড়ার সুবিধার জন্য JSON প্রিটি-প্রিন্ট করে। VS Code-এর বিল্ট-ইন ফরম্যাটার ইনডেন্টেশন ও সিনট্যাক্স হাইলাইটিং সামলায় কিন্তু পৃথক স্ট্রিং মান এস্কেপ বা আনএস্কেপ করে না। এগুলোর কোনোটিই এই টুল যে ফাঁক পূরণ করে তা পূরণ করে না: বিশেষ অক্ষর ধারণকারী একটি একক স্ট্রিং ঠিক করা। jsonformatter.org ব্যবহার করুন ফরম্যাট করতে; JSONLint যাচাই করতে; VS Code আপনার পুরো ফাইলে কাজ করতে; এই টুল পার্সার ভেঙে দেওয়া স্ট্রিং মান ঠিক করতে।

সার্ভার-সাইড JSON এস্কেপ টুল আছে কিন্তু একটি ট্রেড-অফসহ: আপনার টেক্সট আপনার ডিভাইস ছেড়ে যায়। আপনি যদি API কী, পাসওয়ার্ড, প্রাইভেট কনফিগারেশন, বা ব্যবহারকারীর ডেটা নিয়ে কাজ করেন, সেটি একটি বাহ্যিক সার্ভারে পাঠানো অপ্রয়োজনীয় ঝুঁকি। এই টুল সবকিছু ক্লায়েন্ট-সাইডে প্রসেস করে — কিছুই আপলোড হয় না, লগ করা হয় না, বা সংরক্ষণ করা হয় না। এটি লোড হওয়ার পর অফলাইনেও কাজ করে, তাই আপনি কোনো নেটওয়ার্ক সংযোগ ছাড়াই এটি ব্যবহার করতে পারেন। কোনো অ্যাকাউন্ট তৈরি করার নেই, কোনো রেট লিমিট নেই, কোনো ফাইল সাইজ সীমা নেই।

JSON স্পেসিফিকেশন: RFC 8259 এবং এটি যে নিয়ম নির্ধারণ করে

JSON Douglas Crockford ২০০০-এর দশকের শুরুতে প্রথম আনুষ্ঠানিক করেন এবং ২০০৬ সালে প্রথম RFC 4627 হিসেবে স্ট্যান্ডার্ডাইজ করা হয়। ২০১৩ সালে RFC 7159 দ্বারা এটি সংশোধিত হয় এবং তারপর ২০১৭ সালে RFC 8259 দ্বারা, যা বর্তমান কর্তৃত্বপূর্ণ মানদণ্ড। স্পেসিফিকেশনটি ঠিক ছয়টি মান ধরন সংজ্ঞায়িত করে: object (কী-মান জোড়ার একটি অক্রমিক সংগ্রহ), array (একটি ক্রমিক ক্রম), number, string, boolean (আক্ষরিক truefalse), এবং null। প্রতিটি প্রোগ্রামিং ভাষায় প্রতিটি সম্মত JSON পার্সার এই ছয়টি ধরনের চারপাশে তৈরি — এর বেশিও নয়, কমও নয়।

RFC 8259-এর অধীনে JSON স্ট্রিং নিয়ম সুনির্দিষ্ট ও অপরিবর্তনীয়। স্ট্রিং অবশ্যই ডাবল কোট দ্বারা সীমাবদ্ধ থাকতে হবে — একক কোট একটি সিনট্যাক্স এরর, কোনো বিকল্প নয়। U+0000 থেকে U+001F রেঞ্জের কন্ট্রোল অক্ষর — ট্যাব, নিউলাইন, ক্যারেজ রিটার্ন এবং ব্যাকস্পেসসহ — একটি স্ট্রিংয়ের ভেতরে আক্ষরিকভাবে থাকতে পারে না; সেগুলোকে এস্কেপ সিকোয়েন্স হিসেবে উপস্থাপন করতে হবে। RFC 8259 ঠিক সাতটি বাধ্যতামূলক এস্কেপ সিকোয়েন্স নির্দিষ্ট করে: ডাবল কোটের জন্য \", ব্যাকস্ল্যাশের জন্য \\, ফরওয়ার্ড স্ল্যাশের জন্য \/ (ঐচ্ছিক কিন্তু অনুমোদিত), ব্যাকস্পেসের জন্য \b, ফর্ম ফিডের জন্য \f, নিউলাইনের জন্য \n, ক্যারেজ রিটার্নের জন্য \r, এবং ট্যাবের জন্য \t। যেকোনো ইউনিকোড কোড পয়েন্টও চারটি হেক্সাডেসিমাল ডিজিট ব্যবহার করে \uXXXX হিসেবে এনকোড করা যায়; বেসিক মাল্টিলিঙ্গুয়াল প্লেনের বাইরের অক্ষরগুলো দুটি ধারাবাহিক \uXXXX সিকোয়েন্স হিসেবে লেখা একটি UTF-16 সারোগেট জোড়া ব্যবহার করে।

RFC 8259-এর একটি গুরুত্বপূর্ণ স্পষ্টীকরণ: একটি বদ্ধ ইকোসিস্টেমের অংশ নয় এমন সিস্টেমের মধ্যে বিনিময় করা JSON টেক্সট অবশ্যই UTF-8-এ এনকোড করা থাকতে হবে। BOM (byte order mark, U+FEFF) একটি JSON টেক্সটের শুরুতে দেখা যাবে না। এই প্রয়োজনীয়তাগুলো অনেক ঐতিহাসিক অস্পষ্টতা বন্ধ করে দেয় যা RFC 4627 এবং RFC 8259-এর মধ্যবর্তী বছরগুলোতে ইন্টারঅপারেবিলিটি সমস্যা তৈরি করেছিল। একটি JSON পার্সার যখন পার্স এররের বদলে একটি অক্ষর এনকোডিং এরর রিপোর্ট করে, এটি সাধারণত এই UTF-8 আদেশ লঙ্ঘন করা ইনপুট প্রত্যাখ্যান করছে।

JSON বনাম জাভাস্ক্রিপ্ট অবজেক্ট লিটারেল: একইরকম সিনট্যাক্স, ভিন্ন নিয়ম

JSON সম্পর্কে সবচেয়ে দীর্ঘস্থায়ী ভুল ধারণা হলো এটি জাভাস্ক্রিপ্ট নিজেই। এটি নয়। JSON একটি ভাষা-নিরপেক্ষ ডেটা ইন্টারচেঞ্জ ফরম্যাট যা কাকতালীয়ভাবে জাভাস্ক্রিপ্ট অবজেক্ট লিটারেলের সাথে উপরিভাগের সিনট্যাক্স শেয়ার করে — কিন্তু উভয়ের মধ্যে অর্থপূর্ণ পার্থক্য রয়েছে। JSON-এ, সব কী এবং সব স্ট্রিং মান অবশ্যই ডাবল কোট ব্যবহার করবে। জাভাস্ক্রিপ্ট অবজেক্ট লিটারেল আনকোটেড কী ({ foo: 1 }) এবং একক-কোটেড স্ট্রিং ('hello') অনুমোদন করে; উভয়ই JSON-এ সিনট্যাক্স এরর। JSON একটি অ্যারে বা অবজেক্টের শেষ আইটেমের পরে ট্রেইলিং কমা অনুমোদন করে না — [1, 2, 3,] অবৈধ JSON যদিও আধুনিক জাভাস্ক্রিপ্ট ইঞ্জিন এটি গ্রহণ করে। JSON কোনো ধরনের মন্তব্য সমর্থন করে না, যদিও মন্তব্য বৈধ জাভাস্ক্রিপ্ট। এটি ডেভেলপারদের বিভ্রান্ত করে যারা // বা /* */ দিয়ে কনফিগারেশন ফাইল টীকা দেওয়ার চেষ্টা করেন।

JSON-এর বেশ কয়েকটি জাভাস্ক্রিপ্ট প্রাইমিটিভেরও কোনো প্রতিনিধিত্ব নেই। undefined মান JSON-এ বিদ্যমান নেই — JSON.stringify() এমন অবজেক্ট প্রপার্টি বাদ দেয় যাদের মান undefined, সেগুলো সিরিয়ালাইজ না করেই। বিশেষ সাংখ্যিক মান Infinity, -Infinity, এবং NaN JSON-এ প্রতিনিধিত্ব করা যায় না; JSON.stringify() এগুলোকে null-এ রূপান্তর করে। Date অবজেক্ট তাদের ISO 8601 স্ট্রিং প্রতিনিধিত্বে সিরিয়ালাইজ হয় (যেমন, "2024-01-15T09:30:00.000Z") — যে পার্সার এগুলো ফিরে পড়ে সে একটি স্ট্রিং পায়, একটি Date নয়, যতক্ষণ না একটি রিভাইভার ফাংশন অবজেক্টটি পুনর্গঠন করে। এই নীরব রূপান্তরগুলো একটি সাধারণ সূক্ষ্ম ডেটা-হারানোর বাগের উৎস যখন ডেভেলপাররা ধরে নেন JSON সব জাভাস্ক্রিপ্ট মানের জন্য একটি লসলেস রাউন্ড-ট্রিপ ফরম্যাট।

JSON ও জাভাস্ক্রিপ্ট সিনট্যাক্সের মধ্যকার ফাঁকটিই ঠিক কেন JSONC (JSON with Comments) চালু হয়েছিল। VS Code তার settings.json, launch.json, tasks.json, এবং tsconfig.json ফাইলের জন্য JSONC ব্যবহার করে, বাকিটাকে স্ট্যান্ডার্ড JSON হিসেবে পার্স করার আগে মন্তব্য প্রি-প্রসেস করে বাদ দেয়। JSONC কোনো অফিসিয়াল স্ট্যান্ডার্ড নয় — এটি মানুষ-এডিট করা কনফিগ ফাইলের জন্য একটি বাস্তববাদী এক্সটেনশন যেখানে সিদ্ধান্ত টীকা দেওয়ার ক্ষমতা কঠোর ইন্টারঅপারেবিলিটির চেয়ে বেশি গুরুত্বপূর্ণ।

JSON5, HJSON, TOML, এবং YAML: যখন JSON যথেষ্ট নয়

যে কঠোরতা JSON-কে মেশিন-থেকে-মেশিন ডেটা এক্সচেঞ্জের জন্য আদর্শ করে তোলে তা মানুষ-লেখা কনফিগ ফাইলের জন্য বিরক্তিকর করে তোলে। এই সমস্যা সমাধানে বেশ কয়েকটি ফরম্যাট আবির্ভূত হয়েছে। JSON5 (২০১২) সবচেয়ে রক্ষণশীল এক্সটেনশন: এটি একক-কোটেড স্ট্রিং, আনকোটেড অবজেক্ট কী, ট্রেইলিং কমা, C-স্টাইল মন্তব্য (// এবং /* */), হেক্সাডেসিমাল নম্বর লিটারেল (0xFF), এবং ব্যাকস্ল্যাশ কন্টিনিউয়েশন ব্যবহার করে মাল্টি-লাইন স্ট্রিং যোগ করে। JSON5 JSON-এর একটি সুপারসেট — সব বৈধ JSON বৈধ JSON5 — এবং এটি কিছু Babel ও ESLint কনফিগারেশন ফাইলে ব্যবহৃত হয়। HJSON (Human JSON) আরও এগিয়ে যায়, এস্কেপ সিকোয়েন্স ছাড়া মাল্টি-লাইন স্ট্রিং এবং হ্যাশ-স্টাইল মন্তব্য যোগ করে, এবং কিছু CLI টুলিং ইকোসিস্টেমে ব্যবহৃত হয়।

TOML (Tom's Obvious Minimal Language) সম্পূর্ণ ভিন্ন একটি পদ্ধতি নেয়, INI-এর মতো সিনট্যাক্স ব্যবহার করে যা JSON-এর সাথে একেবারেই সম্পর্কিত নয়। TOML স্তরক্রমিক কনফিগারেশনে দক্ষ এবং Rust-এর Cargo.toml ও Python-এর pyproject.toml-এর পেছনের ফরম্যাট। YAML ভিন্ন একটি অবস্থানে থাকে: YAML 1.2 JSON-এর একটি সুপারসেট, মানে প্রতিটি বৈধ JSON ডকুমেন্ট বৈধ YAML, কিন্তু YAML অ্যাঙ্কর, অ্যালিয়াস, ব্লক স্কেলার, এবং টাইপ ট্যাগ দিয়ে JSON প্রসারিত করে। YAML CI/CD পাইপলাইনে (GitHub Actions, GitLab CI) এবং Kubernetes ম্যানিফেস্টে ব্যাপকভাবে ব্যবহৃত হয়। এসব ফরম্যাট জুড়ে ট্রেড-অফ সামঞ্জস্যপূর্ণ: JSON সঠিকভাবে পার্স করার সবচেয়ে সহজ ফরম্যাট — এর গ্রামার এক পাতায় ফিট করে — যা কেন এটি API ও ডেটা এক্সচেঞ্জে প্রাধান্য বিস্তার করে, যখন TOML ও YAML মানুষের লেখা ও রক্ষণাবেক্ষণ করা কনফিগ ফাইলে জেতে।

এস্কেপিংয়ের উদ্দেশ্যে, শুধু JSON নিজেই গুরুত্বপূর্ণ — JSON5, HJSON, TOML, এবং YAML সবারই নিজস্ব স্ট্রিং এস্কেপিং নিয়ম আছে যা JSON-এর সাথে আংশিকভাবে ওভারল্যাপ করে কিন্তু গুরুত্বপূর্ণ উপায়ে ভিন্ন হয়। JSON-এর জন্য সঠিকভাবে এস্কেপ করা একটি স্ট্রিং যেকোনো JSON5 পার্সারে সঠিকভাবে পার্স হবে, কিন্তু বিপরীতটি সত্য নয়। API, লগ পাইপলাইন, বা ইন্টার-সার্ভিস যোগাযোগ তৈরি করার সময়, সবসময় যেকোনো সুপারসেট ফরম্যাটের বদলে কঠোর JSON (RFC 8259) টার্গেট করুন, এবং এস্কেপিং হাতে করার বদলে একটি টুল বা লাইব্রেরি ফাংশন ব্যবহার করুন।

JSON পার্সিং ও সিরিয়ালাইজেশন: জাভাস্ক্রিপ্ট, Python, এবং ইন্টিজার প্রিসিশন ফাঁদ

প্রতিটি বড় ভাষায় একটি JSON লাইব্রেরি থাকে। জাভাস্ক্রিপ্টে, JSON.stringify(value, replacer, space) একটি মানকে একটি JSON স্ট্রিংয়ে সিরিয়ালাইজ করে। ঐচ্ছিক replacer আর্গুমেন্ট হয় অন্তর্ভুক্ত করার জন্য প্রপার্টি নামের একটি অ্যারে বা একটি ফাংশন যা সিরিয়ালাইজেশনের সময় মান রূপান্তরিত করতে পারে — স্পর্শকাতর ফিল্ড ফিল্টার করা বা নন-সিরিয়ালাইজেবল ধরন রূপান্তরিত করার জন্য উপযোগী। space আর্গুমেন্ট প্রিটি-প্রিন্টিং নিয়ন্ত্রণ করে: ইনডেন্টেশনের এত স্পেসের জন্য একটি নম্বর পাস করুন, বা ট্যাব ব্যবহার করতে একটি স্ট্রিং (সাধারণত "\t")। JSON.parse(text, reviver) একটি JSON স্ট্রিংকে আবার একটি জাভাস্ক্রিপ্ট মানে পার্স করে। ঐচ্ছিক reviver ফাংশন পার্সিংয়ের সময় প্রতিটি কী-মান জোড়া পায় এবং মান রূপান্তরিত করতে পারে — একটি সাধারণ ব্যবহার হলো ISO 8601 স্ট্রিং থেকে Date অবজেক্ট পুনর্গঠন করা। Python-এ, সমতুল্য ফাংশনগুলো হলো json.dumps() এবং json.loads()json.dumps() প্রিটি-প্রিন্টিংয়ের জন্য indent, নন-ASCII অক্ষর \uXXXX এস্কেপের বদলে যেমন আছে তেমন প্রদর্শন করতে ensure_ascii=False, এবং লাইব্রেরির চেনা নেই এমন কাস্টম টাইপ সিরিয়ালাইজ করার জন্য একটি default ফাংশন গ্রহণ করে।

একটি কুখ্যাত এজ কেস যা বড় প্রোডাকশন সিস্টেমকে চমকে দিয়েছে তা হলো ইন্টিজার প্রিসিশন সমস্যা। JSON স্পেসিফিকেশন সংখ্যার আকারে কোনো ঊর্ধ্বসীমা রাখে না, কিন্তু জাভাস্ক্রিপ্ট সব সংখ্যাকে IEEE 754 ডাবল-প্রিসিশন ফ্লোটিং-পয়েন্ট মান হিসেবে উপস্থাপন করে, যা শুধু 253 − 1 (৯০,০৭,১৯,৯২,৫৪,৭৪,০৯,৯১) পর্যন্ত ইন্টিজার সঠিকভাবে উপস্থাপন করতে পারে। সেই সীমার বাইরে, ধারাবাহিক ইন্টিজার একই ফ্লোটে ম্যাপ হয় এবং একে অপরের থেকে আলাদা করা যায় না। Twitter-এর টুইট আইডি প্ল্যাটফর্ম বাড়ার সাথে সাথে এই থ্রেশহোল্ড অতিক্রম করেছিল, যা API রেসপন্স পার্স করার সময় জাভাস্ক্রিপ্ট ক্লায়েন্টে নীরবে আইডি নষ্ট করে দিত — একটি আইডিসহ একটি টুইট আরেকটি ভিন্ন টুইট হিসেবে গণ্য হতো। Twitter-এর সমাধান ছিল সাংখ্যিক id ফিল্ডের সাথে id_str (একটি স্ট্রিং প্রতিনিধিত্ব) পাঠানো। আধুনিক জাভাস্ক্রিপ্ট BigInt দিয়ে এটি সমাধান করে, কিন্তু JSON.parse() এখনও স্বয়ংক্রিয়ভাবে বড় ইন্টিজারকে BigInt হিসেবে সামলায় না — সমাধানের মধ্যে একটি কাস্টম রিভাইভার বা json-bigint-এর মতো একটি থার্ড-পার্টি লাইব্রেরি ব্যবহার করা অন্তর্ভুক্ত।

JSON Schema (বর্তমানে draft 2020-12-এ) ডকুমেন্ট গঠন যাচাই করার জন্য JSON-এ একটি মেটা-লেয়ার যোগ করে। একটি JSON Schema ডকুমেন্ট ধরন সীমাবদ্ধতা, প্রয়োজনীয় ফিল্ড, সাংখ্যিক পরিসীমা, স্ট্রিং প্যাটার্ন, এবং অনুমোদিত enum মান নির্দিষ্ট করে, স্কিমা ভাষা হিসেবে JSON নিজেই ব্যবহার করে। OpenAPI/Swagger API রিকোয়েস্ট ও রেসপন্স বডির গঠন সংজ্ঞায়িত করতে JSON Schema ব্যবহার করে। সবচেয়ে ব্যাপকভাবে ব্যবহৃত জাভাস্ক্রিপ্ট ভ্যালিডেটর হলো ajv (Another JSON Validator), যা webpack থেকে ESLint পর্যন্ত টুলে শক্তি সরবরাহ করে। একটি স্কিমার ভেতরে, $ref সাধারণ সংজ্ঞার পুনঃব্যবহার সক্ষম করে, যখন oneOf, anyOf, এবং allOf ইউনিয়ন ও ইন্টারসেকশন টাইপ মডেল করে। JSON Schema যাচাইকরণ হলো রানটাইম যাচাইকরণ — এটি প্রোডাকশন পেলোডে ডেটা আকারের ত্রুটি ধরে। TypeScript টাইপ চেকিং হলো কম্পাইল-টাইম যাচাইকরণ — এটি সোর্স কোডে আকারের ত্রুটি ধরে। উভয়ই পরিপূরক: একটি TypeScript টাইপ আপনার কোড সঠিক রাখে; একটি JSON Schema আসা API ডেটা সঠিক রাখে।

Frequently asked questions

JSON এস্কেপিং কী?

JSON এস্কেপিং এমন অক্ষরকে প্রতিস্থাপন করে যা একটি JSON স্ট্রিং ভেঙে দেবে ব্যাকস্ল্যাশ এস্কেপ সিকোয়েন্স দিয়ে, যাতে টেক্সটটি নিরাপদে একটি JSON মানের ভেতরে থাকতে পারে। উদাহরণস্বরূপ, He said "hi" টেক্সটটি একবার ডাবল কোট এস্কেপ করা হলে He said \"hi\" হয়ে যায়। এস্কেপিং কখনও টেক্সটের অর্থ পরিবর্তন করে না — এটি শুধু JSON যে অক্ষরগুলো সংরক্ষণ করে তা এনকোড করে। এস্কেপিং ছাড়া, একটি স্ট্রিং মানের ভেতরে একটি ডাবল কোট স্ট্রিংটি তাড়াতাড়ি শেষ করে দেবে, JavaScript থেকে Python থেকে Go পর্যন্ত প্রতিটি ভাষায় একটি পার্স এরর তৈরি করবে।

আমি কীভাবে JSON-এর জন্য একটি স্ট্রিং এস্কেপ করব?

Escape mode নির্বাচিত রেখে ইনপুট বক্সে আপনার টেক্সট পেস্ট করুন এবং JSON-সেফ সংস্করণটি আউটপুট প্যানে তাৎক্ষণিকভাবে দেখা যায় — তারপর Copy ক্লিক করুন। টুলটি আপনার হয়ে ডাবল কোট, ব্যাকস্ল্যাশ, নিউলাইন, ট্যাব এবং কন্ট্রোল অক্ষর এস্কেপ করে। আপনি যদি শুধু এস্কেপ করা কনটেন্টের বদলে একটি সম্পূর্ণ, পেস্ট-প্রস্তুত JSON স্ট্রিং মান চান তাহলে "Wrap in quotes" চালু করুন। কোনো API কল নেই, কোনো সার্ভার রাউন্ড-ট্রিপ নেই — কনভার্শনটি আপনার ব্রাউজারে নেটিভ জাভাস্ক্রিপ্ট JSON ইঞ্জিন ব্যবহার করে চলে।

JSON-এ কোন অক্ষর এস্কেপ করা প্রয়োজন?

একটি JSON স্ট্রিংয়ের ভেতরে আপনাকে ডাবল কোট "-কে \" হিসেবে, ব্যাকস্ল্যাশ \-কে \\ হিসেবে, এবং হোয়াইটস্পেস কন্ট্রোল অক্ষরগুলো এস্কেপ করতে হবে: ব্যাকস্পেস \b, ফর্ম ফিড \f, নিউলাইন \n, ক্যারেজ রিটার্ন \r এবং ট্যাব \t। U+0000–U+001F রেঞ্জের অন্য যেকোনো কন্ট্রোল অক্ষর অবশ্যই \uXXXX হিসেবে লেখা হবে। ফরওয়ার্ড স্ল্যাশ / ঐচ্ছিকভাবে \/ হিসেবে এস্কেপ করা যায়, কিন্তু এটি প্রয়োজনীয় নয়। অক্ষর, সংখ্যা এবং সাধারণ যতিচিহ্ন — একক কোটসহ — অক্ষত পাস হয়ে যায়।

আমি কীভাবে JSON-এ ডাবল কোট এস্কেপ করব?

প্রতিটি ডাবল কোটের আগে একটি ব্যাকস্ল্যাশ বসান, "-কে \"-এ পরিণত করে। তাই John "JD" Doe মানটি JSON-এর ভেতরে "John \"JD\" Doe" হয়ে যায়। ভেতরের কোট এস্কেপ করা তাদের স্ট্রিং অসময়ে শেষ করা থেকে থামায়, যা "invalid JSON" এররের সবচেয়ে সাধারণ কারণ। ব্যবহারকারী-প্রদত্ত টেক্সট JSON API পেলোড বা কনফিগারেশন ফাইলে এম্বেড করার সময়ও এটি সবচেয়ে সাধারণ সমস্যা — একটি এস্কেপ না করা কোট সম্পূর্ণ ডকুমেন্ট ভেঙে দেয়।

আমি কীভাবে JSON-এ একটি ব্যাকস্ল্যাশ এস্কেপ করব?

এটি দ্বিগুণ করুন: একটি একক ব্যাকস্ল্যাশ \ হয়ে যায় \\। এটি Windows ফাইল পাথ ও রেজেক্সের সাথে সবচেয়ে বেশি গুরুত্বপূর্ণ। পাথ C:\Users\me\notes.txt JSON-এ "C:\\Users\\me\\notes.txt" হিসেবে লেখা হতে হবে, নয়তো \U এবং \n আক্ষরিক অক্ষরের বদলে এস্কেপ সিকোয়েন্স হিসেবে পড়া হবে। এই টুল স্বয়ংক্রিয়ভাবে দ্বিগুণ করা সামলায় — পাথটি পেস্ট করুন এবং আউটপুট ব্যবহারের জন্য প্রস্তুত।

আমি কীভাবে একটি JSON স্ট্রিং আনএস্কেপ করব?

Unescape mode-এ পাল্টান এবং এস্কেপ করা স্ট্রিং পেস্ট করুন (এর চারপাশের কোটসহ বা ছাড়া)। টুলটি প্রতিটি এস্কেপ সিকোয়েন্সকে আবার তারা যে অক্ষর প্রতিনিধিত্ব করে তাতে পরিণত করে, তাই Line 1\nLine 2 দুটি প্রকৃত লাইন হয়ে যায় এবং \u00e9 হয়ে যায় é। এটি ঠিক Escape মোডের বিপরীত — দুটোর মধ্যে পাল্টাতে Swap বাটন ব্যবহার করুন। এটি উপযোগী যখন আপনি একটি লগ ফাইল বা API রেসপন্স থেকে একটি এস্কেপ করা স্ট্রিং কপি করেছেন এবং মূল টেক্সট পড়তে চান।

JSON-এ কি একক কোট এস্কেপ করার প্রয়োজন?

না। JSON স্ট্রিং সবসময় ডাবল কোট দ্বারা সীমাবদ্ধ থাকে, তাই একটি একক কোট (অ্যাপোস্ট্রফি) শুধু একটি সাধারণ অক্ষর — It's fine তাই It's fine-ই থেকে যায়, কোনো ব্যাকস্ল্যাশ প্রয়োজন হয় না। শুধু ডাবল কোট " এবং ব্যাকস্ল্যাশ \ (কন্ট্রোল অক্ষরসহ) কখনও এস্কেপ করা প্রয়োজন। এটি Python বা শেল স্ক্রিপ্টিংয়ের মতো ভাষা থেকে আসা ডেভেলপারদের জন্য বিভ্রান্তির একটি সাধারণ বিষয়, যেখানে একক ও ডাবল কোট পরস্পর বিনিময়যোগ্য।

এস্কেপিং এবং স্ট্রিংগিফাইং-এর মধ্যে পার্থক্য কী?

এস্কেপিং টেক্সটের ভেতরের বিশেষ অক্ষর এনকোড করে; স্ট্রিংগিফাইং তা করে এবং একটি সম্পূর্ণ JSON স্ট্রিং মান তৈরি করতে ফলাফলটিকে ডাবল কোটে মোড়ায়ও। She said "hi" টেক্সট নিন: এস্কেপিং দেয় কনটেন্ট She said \"hi\", যখন স্ট্রিংগিফাইং দেয় পুরো মান "She said \"hi\""। "Wrap in quotes" টগল দুটোর মধ্যে পাল্টায় — বন্ধ মানে শুধু কনটেন্ট, চালু মানে সম্পূর্ণ কোটেড স্ট্রিং (ঠিক জাভাস্ক্রিপ্টে JSON.stringify যা তৈরি করে)।

আমি কীভাবে নিউলাইন ও ট্যাব এস্কেপ করব?

একটি লাইন ব্রেক হয়ে যায় \n (নিউলাইন) বা \r (ক্যারেজ রিটার্ন), এবং একটি ট্যাব হয়ে যায় \t। তাই "Line 1 ⏎ Line 2" হিসেবে টাইপ করা একটি দুই-লাইনের নোট একটি একক লাইনে Line 1\nLine 2-এ এস্কেপ হয় — যা একটি মাল্টি-লাইন মান JSON স্ট্রিংয়ের ভেতরে থাকার একমাত্র উপায়, কারণ JSON স্পেক অনুযায়ী সেখানে প্রকৃত লাইন ব্রেক অনুমোদিত নয়। এস্কেপ না করা ডাবল কোটের পরে এটি JSON পার্স এররের দ্বিতীয় সবচেয়ে সাধারণ কারণ।

JSON-এ ইউনিকোড কীভাবে এস্কেপ করা হয়?

JSON কাঁচা UTF-8 অনুমোদন করে, তাই é যেমন আছে তেমনভাবে থাকতে পারে, কিন্তু এটিকে \u00e9 হিসেবেও এস্কেপ করা যায় — একটি ব্যাকস্ল্যাশ, একটি u, এবং চারটি হেক্স ডিজিট। Basic Multilingual Plane-এর বাইরের অক্ষর একটি সারোগেট জোড়া ব্যবহার করে: ইমোজি 😀 হয়ে যায় \ud83d\ude00। "Escape non-ASCII (\uXXXX)" চালু করুন প্রতিটি নন-ASCII অক্ষরকে \uXXXX ফর্মে বাধ্য করতে, যা ASCII-শুধু কনফিগ ফাইল এবং মাল্টি-বাইট UTF-8 সঠিকভাবে সামলাতে পারে না এমন পুরোনো পার্সারের জন্য উপযোগী।

JSON অনলাইনে এস্কেপ করা কি নিরাপদ?

হ্যাঁ। এই টুল ১০০% ক্লায়েন্ট-সাইড — সব এস্কেপিং ও আনএস্কেপিং আপনার ব্রাউজারে জাভাস্ক্রিপ্ট দিয়ে ঘটে, এবং আপনি যা পেস্ট করেন তা কখনও আপলোড, লগ, বা সার্ভারে পাঠানো হয় না। এটি API পেলোড, টোকেন, কনফিগারেশন এবং অন্যান্য স্পর্শকাতর টেক্সটের জন্য নিরাপদ করে। বিপরীতে, কিছু অনলাইন JSON টুল প্রসেসিংয়ের জন্য আপনার ইনপুট একটি সার্ভারে পাঠায়। এটি করে না — ট্যাব বন্ধ করুন এবং আপনি এটি ব্যবহার করেছেন এমন কোনো রেকর্ড থাকে না।

আমার JSON কেন অবৈধ?

সবচেয়ে সাধারণ কারণগুলো হলো একটি স্ট্রিং মানের ভেতরে একটি এস্কেপ না করা ডাবল কোট বা ব্যাকস্ল্যাশ, বা \n থাকার কথা যেখানে একটি প্রকৃত লাইন ব্রেক আছে। এস্কেপ করে ঠিক করুন: " → \", \ → \\, এবং নিউলাইন → \n। ভুল মানটি Escape mode-এ পেস্ট করুন এবং এটি একটি সঠিকভাবে এস্কেপ করা, বৈধ সংস্করণ তৈরি করবে যা আপনি সরাসরি আবার ফিরিয়ে দিতে পারেন। JSONLint-এর মতো টুল এস্কেপ করার পর নিশ্চিত করতে পারে আপনার JSON বৈধ।

আমি কি এটি একটি HTML পাতার ভেতরে JSON এম্বেড করতে ব্যবহার করতে পারি?

হ্যাঁ। আপনি যখন একটি HTML স্ক্রিপ্ট ব্লকের ভেতরে JSON ইনলাইন করেন, আপনার স্ট্রিং মানগুলোর একটির মধ্যে একটি ভুলবশত ক্লোজিং-ট্যাগ সিকোয়েন্স স্ক্রিপ্টটি অসময়ে শেষ করে দিতে পারে এবং পাতাটি ভেঙে দিতে পারে। "Escape forward slashes (\/)" চালু করুন এবং প্রতিটি / হয়ে যায় \/, তাই একটি ক্লোজিং স্ক্রিপ্ট ট্যাগ লেখা হয় <\/script> হিসেবে — এখনও বৈধ JSON যা অভিন্নভাবে পার্স হয়, কিন্তু সরাসরি HTML-এ এম্বেড করা নিরাপদ। এটি সার্ভার-রেন্ডার করা পাতার জন্য একটি সত্যিকার প্রোডাকশন উদ্বেগ যা ইনলাইনে ডেটা পাস করে।

এটি JSONLint, jsonformatter.org, এবং VS Code-এর সাথে কীভাবে তুলনীয়?

JSONLint যাচাই করে একটি সম্পূর্ণ JSON ডকুমেন্ট সুগঠিত কিনা — এটি পুরো গঠন পরীক্ষা করে। jsonformatter.org পড়ার সুবিধার জন্য JSON ফরম্যাট করে। VS Code-এর বিল্ট-ইন JSON ফরম্যাটার প্রিটি-প্রিন্টিং সামলায় কিন্তু পৃথক স্ট্রিং মান এস্কেপ করে না। এই টুল ভিন্ন কিছু করে: এটি পৃথক স্ট্রিং মানের কনটেন্ট এস্কেপ বা আনএস্কেপ করে, যা প্রয়োজন হয় যখন আপনি প্রোগ্রাম্যাটিকভাবে JSON তৈরি করছেন বা কেন একটি নির্দিষ্ট স্ট্রিং একটি পার্সার ভেঙে দিচ্ছে তা ডিবাগ করছেন। প্রিটি-প্রিন্ট করতে jsonformatter.org ব্যবহার করুন; যাচাই করতে JSONLint; বিশেষ অক্ষরযুক্ত স্ট্রিং মান ঠিক করতে এটি। তিনটি একে অপরের পরিপূরক এবং কোনোটিই অন্যকে প্রতিস্থাপন করে না।