মূল অংশে যান

JSON ফরম্যাট করুন

এক লম্বা লাইনের JSON-কে পড়ার মতো করে নিন, বা আবার ছোট করে ফেলুন। বড় সংখ্যার প্রতিটি অঙ্ক থাকে, যা বেশিরভাগ অনলাইন ফরম্যাটার চুপচাপ ভুল করে। কিছুই সংরক্ষণ করা হয় না।

  • কখনো সংরক্ষণ করা হয় না
  • কোনো লাইন নেই, অপেক্ষা নেই
  • সাইনআপ নেই, ওয়াটারমার্ক নেই
ইনডেন্ট
ফরম্যাট করা

ফরম্যাট করা JSON এখানে দেখা যাবে।

যেভাবে কাজ করে

1

আপনার JSON পেস্ট করুন

অথবা একটি .json ফাইল ছাড়ুন। যা পেস্ট করেন, তা এই পেজেই থাকে — কিছুই সংরক্ষণ করা হয় না।

2

ইনডেন্ট বেছে নিন

দুই স্পেস, চার স্পেস, ট্যাব, অথবা মিনিফাই করে একটি লাইনে। পরের বারের জন্য পছন্দটি মনে রাখা হয়।

3

কপি বা ডাউনলোড করুন

ফলাফল কপি করুন, বা ফাইল হিসেবে সেভ করুন। JSON ভাঙা হলে এর বদলে পাবেন লাইন, কলাম ও অক্ষর।

আসা-যাওয়ার পর কী অক্ষত থাকে

ফরম্যাটিং মানে একবার পার্স আর একবার আবার প্রিন্ট, আর শুধু সংখ্যাগুলোই আপনার টাইপ করা লেখা হিসেবে হুবহু থেকে যায়। ব্যানারে যে বড় পূর্ণসংখ্যা গোনা হয়, এটি তার চেয়ে বিস্তৃত: যে সংখ্যার সবচেয়ে ছোট JavaScript রূপ আপনার লেখা থেকে আলাদা, তা মূল লেখা থেকেই আবার বসানো হয়, তাই 1.10-এর শেষের শূন্য থাকে, 1e5 সূচক রূপেই থাকে আর ঋণাত্মক শূন্য ঋণাত্মকই থাকে। সতর্কবার্তায় শুধু অনিরাপদ পূর্ণসংখ্যা গোনা হয়, কারণ সেগুলোর ক্ষেত্রেই বিকল্পটি হলো নিঃশব্দে ডেটা নষ্ট হওয়া, শুধু একটু গুছিয়ে লেখা নয়।

স্ট্রিং লেখা হিসেবে হুবহু থাকে না। ডকুমেন্ট পড়ার সময় এস্কেপগুলো ডিকোড হয় আর প্রিন্টের সময় নতুন করে লেখা হয়, তাই \u0041 ফেরত আসে A হিসেবে, আর এস্কেপ করা ফরওয়ার্ড স্ল্যাশ ফেরত আসে এস্কেপ ছাড়া। মান একই থাকে, বাইট থাকে না — এটা গুরুত্বপূর্ণ শুধু একটি পরিস্থিতিতে, তবে সেখানে খুবই গুরুত্বপূর্ণ: পরের ধাপে কোনো কিছু যদি দুটি JSON ফাইল বাইট ধরে ধরে তুলনা করে, তাহলে একটিকে ফরম্যাটারের ভেতর দিয়ে চালানো মানে কিছু না করা নয়।

রিফরম্যাটের ওপর ভরসা করার আগে অবজেক্ট স্তরের দুটি আচরণ জেনে রাখা ভালো। ডুপ্লিকেট কি চুপচাপ মীমাংসা হয়, শেষেরটিই জেতে, ঠিক যেভাবে ব্রাউজারের নিজের পার্সার করে — দুটি “id” ফিল্ডওয়ালা ডকুমেন্ট কোনো আপত্তি ছাড়াই ফরম্যাট হয়ে একটি নিয়ে ফেরে, আর অন্যটির অস্তিত্ব ছিল, তা কিছুই জানায় না। আর কি-এর ক্রম আপনার ফাইলের ক্রমে থাকে শুধু সেই কিগুলোর জন্য, যেগুলো পূর্ণসংখ্যা নয়: “1”, “2” ও “name” থাকা একটি অবজেক্ট ফেরত আসে অঙ্কের কিগুলো আগে, সংখ্যার ক্রমে, কারণ JavaScript নিজেই অবজেক্টের প্রপার্টি এভাবে সাজায়। সাধারণ কিগুলো আপনার লেখা ক্রমেই থাকে।

অন্য কিছু দরকার হলে

আপনার কাছে যদি tsconfig.json, ESLint কনফিগ বা VS Code-এর সেটিংস ফাইল থাকে, তাহলে এই পেজ কমেন্ট ও শেষের বাড়তি কমা এড়িয়ে ফরম্যাট না করে সেগুলো দেখিয়ে দেবে — একটি JSON টুলের জন্য সেটাই সঠিক উত্তর, আর আপনার ফাইলের জন্য এটি ভুল টুল। ওগুলো JSONC, আর আপনার এডিটর এগুলো আগে থেকেই পার্স করে; কমান্ড লাইনে json5 ও dasel দুটিই এগুলোকে JSON বলে ভান না করে পড়তে পারে।

শুধু আবার ইনডেন্ট করার বাইরে যেকোনো কাজের জন্য ফরম্যাটার ভুল ধরনের টুল। পেস্ট বক্সে যার কোনো নিয়ন্ত্রণ নেই, jq তা এক এক্সপ্রেশনেই করে: jq -S . প্রতিটি অবজেক্টের কি সাজিয়ে দেয়, যাতে দুটি রেসপন্স তুলনা করা যায়, jq 'del(.token)' কাউকে পেলোড দেখানোর আগে একটি ফিল্ড সরিয়ে দেয়, আর jq -c অবজেক্টের একটি অ্যারেকে পাইপলাইনের চাওয়া JSON Lines-এ গুটিয়ে আনে। এটি ক্লিপবোর্ড নয়, ফাইল থেকে পড়ে — ডকুমেন্ট যখন স্বচ্ছন্দে সিলেক্ট করার চেয়ে বড় হয়ে যায়, তখন পার্থক্যটা এখানেই।

সাধারণ প্রশ্নোত্তর

আমার JSON কি কোথাও সংরক্ষণ করা হয়?

না। কোনো সার্ভার কল নেই, কোনো লগ রাখা হয় না, আর কিছুই সংরক্ষণ করা হয় না। পেজ লোড হওয়ার পর ইন্টারনেট সংযোগ বিচ্ছিন্ন করলেও এটি কাজ করতে থাকে। এখানে এর গুরুত্ব যতটা মনে হয় তার চেয়ে বেশি: মানুষ অনলাইন ফরম্যাটারে যা পেস্ট করে, তা হলো API রেসপন্স, কনফিগ ফাইল আর এরর পেলোড — আর এগুলোতে প্রায়ই টোকেন, গ্রাহকের তথ্য ও ইন্টারনাল হোস্টনেম থাকে।

অন্য ফরম্যাটার যেখানে পারে না, এটি বড় সংখ্যা হুবহু রাখে কেন?

কারণ অন্য প্রায় সবগুলোই এগুলো চুপচাপ নষ্ট করে। JavaScript-এর সংখ্যা হলো ৬৪-বিট ফ্লোট, তাই এটি শুধু 9,007,199,254,740,991 পর্যন্ত পূর্ণসংখ্যা হুবহু রাখতে পারে। এর চেয়ে বড় যেকোনো কিছু — Twitter/X পোস্টের ID, Discord snowflake, ব্যাংক অ্যাকাউন্ট নম্বর, ৬৪-বিট ডেটাবেস কি — `JSON.parse`-এর ভেতর দিয়ে যাওয়ার মুহূর্তেই শেষের অঙ্কগুলো হারায়। সংখ্যাটি তবু বিশ্বাসযোগ্য দেখায়, আর বিপদটা সেখানেই: 7205759403792793600 চুপচাপ হয়ে যায় 7205759403792793000। এই পেজ আপনার পেস্ট করা অঙ্কগুলো হুবহু রাখে, আর কতগুলো সংখ্যা রক্ষা করতে হয়েছে তা জানায়।

ভাঙা ফাইল পেলে এটি কী করে?

শুধু সমস্যা আছে তা নয়, সমস্যাটা কোথায় তা জানায়। আপনি পাবেন লাইন নম্বর, কলাম, সমস্যার অক্ষরের নিচে একটি ক্যারেট চিহ্নসহ লাইনটি, আর সহজ ভাষায় একটি ব্যাখ্যা — “Unexpected token” নয়, বরং “} এর আগে বাড়তি কমা”। শেষে বাড়তি কমা, সিঙ্গেল কোট, কোটেশন ছাড়া কি আর স্ট্রিংয়ের ভেতরে এস্কেপ না করা নিউলাইন — ভাঙা JSON-এর বেশিরভাগই এই চারটির কারণে, আর প্রতিটির নাম আলাদা করে বলে দেওয়া হয়।

JSON Lines / NDJSON কি সামলাতে পারে?

হ্যাঁ, আর এর আকারও বজায় রাখে। JSON Lines মানে প্রতি লাইনে একটি সম্পূর্ণ JSON মান — লগ ও ডেটা এক্সপোর্টে যে ফরম্যাট ব্যবহার হয় — আর একে কয়েক লাইনে ছড়িয়ে সাজালে এর উপযোগিতাই নষ্ট হয়ে যেত। এটি স্বয়ংক্রিয়ভাবে শনাক্ত হয়, প্রতিটি লাইন আলাদাভাবে ফরম্যাট হয়, আর প্রতি লাইনে একটি মানের বিন্যাস বজায় থাকে।

কমেন্ট বা শেষে বাড়তি কমাওয়ালা JSON কি ঠিক করে দিতে পারে?

এটি নিখুঁতভাবে সেগুলো দেখিয়ে দেবে, কিন্তু চুপচাপ মেনে নেবে না। কমেন্ট ও শেষের বাড়তি কমা JSON নয় — এগুলো JSON5 বা JSONC, যা tsconfig.json-এর মতো কনফিগ ফাইল আসলে ব্যবহার করে। যে ফরম্যাটার এগুলো চুপচাপ মেনে নিত, সে আপনাকে এমন ফাইল দিত, যা পরে আপনার পার্সার বাতিল করত — যা এখানে একটি এরর দেখানোর চেয়ে খারাপ।

কোনো সাইজ সীমা আছে?

আমাদের বেঁধে দেওয়া কোনো সীমা নয়, বরং উপলব্ধ মেমোরি। কয়েক মেগাবাইটের ডকুমেন্ট সঙ্গে সঙ্গে ফরম্যাট হয়; খুব বড়গুলোর সীমা নির্ভর করে একসাথে কতটা রাখা যায় তার ওপর, আমাদের দিকের কোনো কিছুর ওপর নয়।

মিনিফাই করলে কি আমার ডেটা বদলায়?

না। মিনিফাই শুধু টোকেনগুলোর মাঝের ফাঁকা জায়গা সরায় — কখনো কি-এর ক্রম বদলায় না, সংখ্যার ফরম্যাট বদলায় না, কিছুই বাদ দেয় না। ফলাফল পার্স করলে ঠিক একই মান পাওয়া যায়, শুধু আকারে ছোট।

জেনে রাখুন: ফরম্যাটিং হুবহু — ডকুমেন্টটি পার্স করে আবার প্রিন্ট করা হয়, তাই যা পার্স হয়, তা-ই ফেরত আসে। শুধু কঠোর JSON: কমেন্ট, শেষে বাড়তি কমা আর কোটেশন ছাড়া কি চুপচাপ ঠিক না করে বাতিল করা হয়, কারণ ঠিক করতে গেলে আন্দাজ করতে হতো। ফরম্যাটের সময় খুব বড় ডকুমেন্ট মেমোরিতে দুবার রাখা হয়।

এই টুলটি আপনার ওয়েবসাইটে যোগ করুন

যেকোনো ব্লগ, ক্লাসের পেজ বা হেল্প আর্টিকেলের জন্য ফ্রি। একটি স্নিপেট পেস্ট করলেই আপনার ভিজিটররা আপনার পেজেই এটি ব্যবহার করতে পারবেন।