JSON कुंजी को उद्धरण में क्यों होना चाहिए, इसके बारे में वास्तविक कारण, ECMAScript 3 के पहचानकर्ताओं के शब्दार्थों पर निर्भर करता है।
आरक्षित शब्द के रूप में इस्तेमाल नहीं किया जा सकता संपत्ति के नाम , उद्धरण चिह्नों के बिना वस्तु Literals में उदाहरण के लिए:
({function: 0})
({if: 0})
({true: 0})
यदि आप उद्धरण का उपयोग करते हैं तो संपत्ति के नाम मान्य हैं:
({"function": 0})
({"if": 0})
({"true": 0})
खुद क्रॉकफ़ोर्ड इस बात में इसे समझाता है , वे JSON मानक को सरल रखना चाहते थे, और वे उस पर उन सभी अर्थ प्रतिबंधों को रखना नहीं चाहेंगे:
....
यह तब था जब हमने बिना नाम वाली समस्या का पता लगाया था। यह पता चलता है कि ECMA स्क्रिप्ट 3 में एक अजीब आरक्षित शब्द नीति है। आरक्षित शब्दों को महत्वपूर्ण स्थिति में उद्धृत किया जाना चाहिए, जो वास्तव में एक उपद्रव है। जब मैं इसे एक मानक के रूप में तैयार करने के लिए मिला, तो मैं मानक शब्दों में सभी आरक्षित शब्दों को रखना नहीं चाहता था, क्योंकि यह वास्तव में मूर्खतापूर्ण लगेगा।
उस समय, मैं लोगों को समझाने की कोशिश कर रहा था: हाँ, आप जावास्क्रिप्ट में एप्लिकेशन लिख सकते हैं, यह वास्तव में काम करने वाला है और यह एक अच्छी भाषा है। मैं एक ही समय में कहना नहीं चाहता था: और इस मूर्खतापूर्ण चीज़ को देखो जो उन्होंने किया था! तो मैंने फैसला किया, इसके बजाय, चलो बस चाबियाँ बोली।
इस तरह, हमें किसी के बारे में बताने की ज़रूरत नहीं है कि यह कितना अजीब है।
इसीलिए, आज तक, JSON में कुंजियाँ उद्धृत की जाती हैं।
...
ECMAScript 5 वीं संस्करण मानक इसे ठीक करता है, अब ES5 कार्यान्वयन में, आरक्षित शब्दों का भी उद्धरण के बिना इस्तेमाल किया जा सकता है, दोनों में, वस्तु शाब्दिक और सदस्य पहुंच ( obj.function
ES5 में ठीक है)।
केवल रिकॉर्ड के लिए, यह मानक सॉफ्टवेयर विक्रेताओं द्वारा इन दिनों लागू किया जा रहा है, आप देख सकते हैं कि ब्राउज़र इस संगतता तालिका में इस सुविधा को क्या शामिल करते हैं ( संपत्ति के नाम के रूप में आरक्षित शब्द देखें )