JSON Toolkit

NaN বা Infinity কি JSON-এ আসতে পারে

সংক্ষেপে: JSON-এ কেবল দশমিক সংখ্যা লিটেরাল। `JSON.stringify` সতর্কতা ছাড়াই NaN ও Infinity-কে null করে, এজন্যই "সংখ্যা ফিল্ড মাঝেমধ্যে null" প্রোডাকশনে বারবার দেখা যায়।

শিক্ষানবিশ~3 মিনিট পড়াপ্রকাশ 2026-10-30আপডেট 2026-10-30
JSON-এ NaN ও Infinity-র আসলে কী হয়

মূল কথা: JSON NaN বা Infinity প্রকাশ করতে পারে না — JSON.stringify নীরবে দুটোকেই null করে — তাই অবস্থাটি null প্লাস কারণ-ফিল্ড, বা ডকুমেন্টেড স্ট্রিং মান দিয়ে স্পষ্টভাবে এনকোড করুন।

JSON.stringify({ ratio: NaN, limit: Infinity });
// '{"ratio":null,"limit":null}'

এরর নেই, সতর্কতা নেই। দুই সংখ্যা null হয়ে যায়।

ব্যাকরণ কী অনুমোদন করে

number = [ minus ] int [ frac ] [ exp ]

কেবল দশমিক। NaN ও Infinity IEEE 754 সেন্টিনেল, লিটেরাল নয়। JSON-এ লিখলে অবৈধ আইডেন্টিফায়ার, আর ভাষাভেদে তাদের তুলনা সেমান্টিক্স আলাদা হওয়ায় স্পেসিফিকেশন প্রতিনিধিত্ব বাছার বদলে বাদ দেয়।

প্রতিটি ভাষা বদলে কী করে

ভাষা আচরণ
JavaScript JSON.stringify নীরবে null দেয়
Python json.dumps ডিফল্টে NaN দেয় (নন-স্ট্যান্ডার্ড); allow_nan=False দিলে এরর
Go encoding/json unsupported value: NaN দেয়
Java Jackson ডিফল্টে "NaN" স্ট্রিং দেয়

এক মানে চার আচরণ। ক্রস-ভাষা API-তে সংখ্যা ফিল্ড মাঝেমধ্যে null দেখালে আগে এই স্তর দেখুন।

বদলে কী করবেন

ডকুমেন্টেড স্ট্রিং। টাইপ নোটসহ "NaN", "Infinity"। দাম হলো প্রতিটি ভোক্তার স্পষ্ট চেক।

null প্লাস স্টেটাস ফিল্ড। আরও ভালো: {"avgLatency": null, "avgLatencyStatus": "no-sample"}। কারণ মানের সঙ্গে যায়।

একক নিয়ে ভাবুন। বেশিরভাগ Infinity ফল আসে শূন্য নমুনায় ভাগ থেকে। null ফেরত দিয়ে "এখনও ডেটা নেই" দেখানো সাধারণত অসীম সংখ্যার চেয়ে ব্যবসায়িক সত্যের সঙ্গে ভালো মেলে।

সংশ্লিষ্ট ফাঁদ

  • চার্ট লাইব্রেরি null-এ রেখা ভাঙে — নিশ্চিত করুন আপনি সেটাই চান
  • JSON.stringify undefined, ফাংশন ও symbol পুরো ফেলে দেয়; ওই কি null না হয়ে উধাও হয়
  • Python-এর ডিফল্ট allow_nan=True এমন আউটপুট দেয় যা JSON.parse প্রত্যাখ্যান করে

আরও পড়ুন