लेखन के समय, JSON को केवल RFC4627 में वर्णित किया गया था । यह वर्णन करता है कि "2" की शुरुआत में एक JSON टेक्स्ट एक धारावाहिक ऑब्जेक्ट या सरणी के रूप में है।
इसका मतलब है कि केवल {}
और []
वैध हैं, पार्सर्स और स्ट्रिंगर्स में JSON स्ट्रिंग्स को पूरा करें जो उस मानक का पालन करते हैं।
हालाँकि , ECMA-404 की शुरूआत में परिवर्तन होता है, और अद्यतन सलाह को यहाँ पढ़ा जा सकता है । मैंने इस मुद्दे पर एक ब्लॉग पोस्ट भी लिखा है ।
हालांकि मामले को और अधिक भ्रमित करने के लिए, वेब ब्राउज़र में उपलब्ध JSON
वस्तु (जैसे JSON.parse()
और JSON.stringify()
) को ES5 में मानकीकृत किया गया है , और यह स्पष्ट रूप से स्वीकार्य JSON पाठ को परिभाषित करता है:
इस विनिर्देशन में उपयोग किया गया JSON इंटरचेंज फॉर्मेट वास्तव में RFC 4627 द्वारा दो अपवादों के साथ वर्णित है:
इसका अर्थ यह होगा कि JSON ऑब्जेक्ट द्वारा सभी JSON मान (स्ट्रिंग, नल और संख्या सहित) स्वीकार किए जाते हैं, भले ही JSON ऑब्जेक्ट तकनीकी रूप से RFC 4627 का पालन करता हो।
ध्यान दें कि आप इसलिए एक अनुरूप ब्राउज़र में एक संख्या JSON.stringify(5)
को संशोधित कर सकते हैं, जिसे RFC4627 के पालन करने वाले किसी अन्य पार्सर द्वारा अस्वीकार कर दिया जाएगा, लेकिन जिसके पास ऊपर सूचीबद्ध विशिष्ट अपवाद नहीं है। उदाहरण के लिए, रूबी एक ऐसा उदाहरण प्रतीत होगा जो केवल वस्तुओं और सरणियों को मूल के रूप में स्वीकार करता है । दूसरी ओर, PHP विशेष रूप से इस अपवाद को जोड़ती है कि "यह स्केलर प्रकारों और NULL को एन्कोड और डिकोड करेगा"।