9007199254740993 दूसरी ID क्यों बन जाता है

इस JSON को JSON.parse से पढ़कर JSON.stringify से लिखने पर id का अंतिम अंक बदलता है। 1.00 को 1 और 1e3 को 1000 लिखा जाता है। बाद के दो बदलाव समान संख्यात्मक मान रखते हैं, लेकिन ID का मूल पूर्णांक मान खो जाता है।

const source = '{"id":9007199254740993,"price":1.00,"scale":1e3}';
JSON.stringify(JSON.parse(source));
// {"id":9007199254740992,"price":1,"scale":1000}

JavaScript Number का अधिकतम सुरक्षित पूर्णांक 9007199254740991 है। उससे बड़ा हर पूर्णांक राउंड नहीं होता, लेकिन अलग पूर्णांक एक ही Number मान बन सकते हैं। JSON संख्या की सिंटैक्स और किसी पार्सर की सटीकता सीमा अलग हैं।

ECMAScript: Number.MAX_SAFE_INTEGER

RFC 8259 §6: JSON numbers

काल्पनिक ID 9007199254740993, JSON.parse और JSON.stringify के बाद 9007199254740992 बनती है; Moyoutil मूल अंक रखता है।
एक ही काल्पनिक इनपुट पर कोड चलाकर मिले परिणामों का हमारा आरेख। अंतिम अंक देखें। वास्तविक उपयोगकर्ता ID इस्तेमाल नहीं हुई।

दोहराई गई कुंजियाँ: सही सिंटैक्स संगतता की गारंटी नहीं

एक ऑब्जेक्ट में mode दो बार हो तो JSON.parse पहले मान को बाद वाले से बदलता है। RFC 8259 नामों को अद्वितीय रखने की सलाह देता है और बताता है कि अलग प्रोग्राम दोहराए नामों को अलग तरह संभाल सकते हैं। सभी पार्सरों का व्यवहार समान न मानें।

JSON.stringify(JSON.parse('{"mode":"first","mode":"last"}'));
// {"mode":"last"}

RFC 8259 §4: JSON objects

ECMAScript: ParseJSON

Moyoutil दोहराई गई कुंजियाँ अपने आप नहीं हटाता। उन्हें रखना उनके उपयोग की सलाह नहीं है। प्राप्तकर्ता सिस्टम और डेटा अनुबंध जाँचें, और स्रोत बनाते समय दोहराए नाम ठीक करें।

Moyoutil में मूल लिखावट रखकर सत्यापन करें

formatJSON, JSON.parse से सिंटैक्स जाँचता है, पर आउटपुट पार्स किए ऑब्जेक्ट के बजाय मूल टोकनों से बनता है। बड़े पूर्णांक, दशमलव और घातांक लिखावट, दोहराई कुंजियाँ और उनका क्रम रहते हैं। बाइट समान होना आवश्यक नहीं: स्पेस और नई पंक्तियाँ बदलती हैं। मिनिफ़िकेशन स्ट्रिंग के अंदर के स्पेस नहीं हटाता।

formatJSON('{"id":9007199254740993,"price":1.00,"scale":1e3}', 0).output
// {"id":9007199254740993,"price":1.00,"scale":1e3}

मूल प्रति रखें, JSON टूल में पेस्ट करें और फ़ॉर्मेट या मिनिफ़ाई करें। डाउनलोड से पहले महत्वपूर्ण ID और संख्या की लिखावट मिलाएँ। इनपुट बदलने पर पुराना परिणाम हटता है और कॉपी बंद होती है; फिर सत्यापन करें। सीमा UTF-8 में 2MiB और नेस्टिंग के 128 स्तर है।

सिंटैक्स जाँच व्यावसायिक नियम, JSON Schema या सर्वर की व्याख्या नहीं जाँचती। संख्या को स्ट्रिंग बनाना उसका प्रकार बदलता है; यह स्वतः समाधान नहीं है। पहले जाँचें कि डेटा अनुबंध टेक्स्ट ID की अनुमति देता है। असली गुप्त कुंजी या निजी जानकारी के बजाय काल्पनिक डेटा से समस्या दोहराएँ।

अक्सर पूछे जाने वाले प्रश्न

क्या सफल सत्यापन दूसरे सर्वर पर भी संख्याएँ सुरक्षित रखता है?

नहीं। टूल आउटपुट की लिखावट रखता है, लेकिन उसे संख्या में पार्स करने वाला सर्वर अपने पार्सर की सटीकता सीमा लागू करता है।

क्या JSON मिनिफ़िकेशन ZIP बनाता है?

नहीं। यह अनावश्यक सिंटैक्स स्पेस और नई पंक्तियाँ घटाकर JSON पाठ बनाता है। ZIP फ़ाइल नहीं बनती।