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

মূল কথা: 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.stringifyundefined, ফাংশন ও symbol পুরো ফেলে দেয়; ওই কি null না হয়ে উধাও হয়- Python-এর ডিফল্ট
allow_nan=Trueএমন আউটপুট দেয় যাJSON.parseপ্রত্যাখ্যান করে