JSON Toolkit

क्या NaN या Infinity JSON में आ सकते हैं

मुख्य बात: JSON में केवल दशमलव number literals होते हैं। 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 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.stringify undefined, फ़ंक्शन और symbols भी पूरी तरह गिरा देता है; वे कुंजियाँ null बनने के बजाय गायब हो जाती हैं
  • Python का डिफ़ॉल्ट allow_nan=True ऐसा आउटपुट बनाता है जिसे JSON.parse अस्वीकार करता है

आगे पढ़ें