क्या NaN या Infinity JSON में आ सकते हैं
मुख्य बात: JSON में केवल दशमलव number literals होते हैं। 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 sentinels हैं, literals नहीं। JSON में लिखे जाने पर वे अमान्य identifiers हैं, और चूँकि भाषाओं के बीच उनकी तुलना के अर्थ अलग होते हैं, स्पेसिफिकेशन किसी निरूपण को चुनने के बजाय उन्हें बाहर रखता है।
हर भाषा इसके बजाय क्या करती है
| भाषा | व्यवहार |
|---|---|
JavaScript JSON.stringify |
चुपचाप null उत्पन्न करता है |
Python json.dumps |
डिफ़ॉल्ट रूप से NaN उत्पन्न करता है (गैर-मानक); allow_nan=False के साथ raise करता है |
Go encoding/json |
unsupported value: NaN लौटाता है |
| Java Jackson | डिफ़ॉल्ट रूप से स्ट्रिंग "NaN" उत्पन्न करता है |
एक मान के लिए चार व्यवहार। जब क्रॉस-भाषा API में कोई संख्या फ़ील्ड रुक-रुक कर null दिखाए, तो पहले इसी परत को जाँचें।
इसके बजाय क्या करें
दस्तावेज़ीकृत स्ट्रिंग। "NaN", "Infinity" टाइप नोट के साथ। हर उपभोक्ता को स्पष्ट जाँच की कीमत चुकानी पड़ती है।
null के साथ status फ़ील्ड। बेहतर: {"avgLatency": null, "avgLatencyStatus": "no-sample"}। कारण मान के साथ चलता है।
इकाई पर पुनर्विचार करें। ज़्यादातर Infinity परिणाम शून्य samples से भाग देने पर आते हैं। null लौटाना और "अभी डेटा नहीं" दिखाना आमतौर पर अनंत संख्या से व्यावसायिक सच्चाई से बेहतर मेल खाता है।
संबंधित जाल
- Chart लाइब्रेरी
nullपर लाइन तोड़ देती हैं — पुष्टि करें कि आपको यही चाहिए JSON.stringifyundefined, फ़ंक्शन और symbols भी पूरी तरह गिरा देता है; वे कुंजियाँnullबनने के बजाय गायब हो जाती हैं- Python का डिफ़ॉल्ट
allow_nan=Trueऐसा आउटपुट बनाता है जिसेJSON.parseअस्वीकार करता है