JSON-এ কমেন্ট থাকতে পারে কি
সংক্ষেপে: RFC 8259-এ কোনো কমেন্ট সিনট্যাক্স নেই, তাই `//` ও ব্লক কমেন্ট JSON.parse-কে throw করায়। JSON5 বা JSONC, `_comment` ফিল্ড, Schema description, বা YAML ব্যবহার করুন।

মূল কথা: স্ট্যান্ডার্ড JSON-এ কখনো কমেন্ট রাখবেন না; কেবল মানুষ সম্পাদনা করে এমন লোকাল কনফিগে JSONC বা JSON5 ব্যবহার করুন, ফাইল সিস্টেম সীমানা পার হলে ব্যাখ্যা JSON Schema description-এ সরান, আর টীকা বেশি হলে YAML বা TOML-এ যান।
না।
যেকোনো স্ট্যান্ডার্ড-সম্মত পার্সার এটি প্রত্যাখ্যান করে:
{
"port": 8080 // local development only
}
Chrome রিপোর্ট করে SyntaxError: Unexpected token }। পার্সার /-এ ঠেকে, যা কোনো JSON মান শুরু করতে পারে না, আর থেমে যায়।
স্পেসিফিকেশন ইচ্ছাকৃতভাবে কমেন্ট বাদ দেয় কেন
RFC 8259 ছয় মান সংজ্ঞায়িত করে: অবজেক্ট, অ্যারে, সংখ্যা, স্ট্রিং, true/false, null। কোনো কমেন্ট উৎপাদন নেই।
কমেন্ট প্রথম দিকেই প্রস্তাবিত হয়েছিল আর নির্দিষ্ট কারণে প্রত্যাখ্যাত: কমেন্ট বৈধ হলেই কেউ তা দিয়ে নির্দেশ বহন করে — শর্তাধীন include, টেমপ্লেট ভ্যারিয়েবল — আর প্রতিটি পার্সার নিজের ডায়ালেক্ট গড়ে। প্রথম লাফেই আন্তঃকার্যক্ষমতা ভাঙে। JSON ইচ্ছাকৃতভাবে কেবল-ডেটা, ভেতরে চলনযোগ্য কিছু নেই।
নোট রাখার চার উপায়
১. সুপারসেট ব্যবহার করুন। JSON5 ও JSONC — দুই কমেন্ট শৈলীই গ্রহণ করে। VS Code-এর settings.json ও tsconfig.json হলো JSONC।
দাম বাস্তব: JSON.parse তবু প্রত্যাখ্যান করে, আর API, লগ পাইপলাইন ও মেসেজ কিউ সাধারণত কেবল স্ট্যান্ডার্ড JSON গ্রহণ করে। আপনার কমেন্ট নীরবে বাদ পড়ে বা ডাউনস্ট্রিমে কোথাও throw করে।
২. নোট ডেটার ভেতরে রাখুন।
{
"_comment": "port assigned by ops, do not change",
"port": 8080
}
সর্বত্র কাজ করে, কিন্তু মডেল দূষিত করে: প্রতিটি ভোক্তাকে জানতে হয় কোন কি উপেক্ষা করবে, আর আপনার টাইপ সংজ্ঞায় এমন ফিল্ড জন্মায় যা আসলে ডেটা নয়।
৩. Schema description ব্যবহার করুন। description মানুষ ও টুলের জন্য। ভ্যালিডেটর তা দেখায়, এডিটর হোভারে দেখায়, আর এটি কখনো পেললোডে ঢোকে না। সামঞ্জস্য না ভেঙে দীর্ঘমেয়াদি রক্ষণাবেক্ষণে টিকে থাকা একমাত্র বিকল্প এটি।
৪. ফাইল ফরম্যাট বদলান। ফাইল হাতে সম্পাদনার জন্যই থাকলে YAML বা TOML নেটিভভাবে কমেন্ট সমর্থন করে। এখানে JSON-এর সঙ্গে লড়াই করা বৃথা পরিশ্রম।
বাছাই
| পরিস্থিতি | উত্তর |
|---|---|
| API বা কিউ দিয়ে অন্য সিস্টেমে পাঠানো | কমেন্ট নেই; Schema বা বাহ্যিক ডকে ডকুমেন্ট করুন |
| কেবল মানুষ ও এডিটর পড়ে এমন কনফিগ | JSONC, .jsonc এক্সটেনশনসহ |
| সর্বজনীন টুলিং ও ইনলাইন ব্যাখ্যা দরকার | স্ট্যান্ডার্ড JSON প্লাস Schema description |
| অনেক টীকাযুক্ত দীর্ঘ কনফিগ | YAML-এ যান |
সাধারণ প্রশ্ন
_comment ফিল্ড মডেল দূষিত করে কেন?
কারণ এটি ডেটার অংশ হয়ে যায়। প্রতিটি ভোক্তাকে জানতে হয় কোন কি উপেক্ষা করবে, আর টাইপ সংজ্ঞায় এমন ফিল্ড যোগ হয় যা আসলে ব্যবসায়িক ডেটা নয়।
ব্যাখ্যা JSON Schema description-এ রাখা উচিত?
হ্যাঁ। description পেললোডের বাইরে থাকে, অথচ ভ্যালিডেটর তা দেখায় আর এডিটর হোভারে দেখায়, তাই সামঞ্জস্য না ভেঙে দীর্ঘমেয়াদি রক্ষণাবেক্ষণে টিকে থাকা একমাত্র বিকল্প।
JSONC বা JSON5 কি JSON.parse দিয়ে পার্স করা যায়?
না। JSON.parse তবু কমেন্ট প্রত্যাখ্যান করে, আর API, লগ পাইপলাইন ও মেসেজ কিউ সাধারণত কেবল স্ট্যান্ডার্ড JSON গ্রহণ করে, তাই কমেন্ট বাদ পড়ে বা ডাউনস্ট্রিমে কোথাও throw করে।
টুল
- JSON5 পার্সার — কমেন্টযুক্ত কনফিগ পেস্ট করে রেজলভ হওয়া কাঠামো দেখুন
- JSON ফরম্যাটার ও ভ্যালিডেটর — অবৈধ JSON লাইন ও কলামসহ রিপোর্ট হয়, তাই দোষী কমেন্ট স্পষ্ট