2012-02-16 16 views
7

JSON केवल एक जोड़ी की कुंजी होने के लिए string क्यों अनुमति देता है? अन्य प्रकार जैसे null, number, bool, object, array क्यों नहीं? JSON को ध्यान में रखते हुए जावास्क्रिप्ट से कड़ाई से संबंधित है, क्या मैं जावास्क्रिप्ट विनिर्देश (ईसीएमए -262) के कारण का निष्कर्ष निकाल सकता हूं? मैं पूरी तरह से जावास्क्रिप्ट के लिए एक नौसिखिया हूँ, क्या आप इसे इंगित करने में मेरी मदद कर सकते हैं।क्यों JSON केवल स्ट्रिंग की कुंजी को अनुमति देता है?

+2

मैं नहीं कहूंगा कि JSON जावास्क्रिप्ट का हिस्सा है। इसकी डेटा संरचनाएं जावास्क्रिप्ट में पाए गए ऑब्जेक्ट और सरणी शाब्दिक नोटेशन पर आधारित हैं, लेकिन इसका अस्तित्व ईसीएमए -262 से स्वतंत्र है। –

उत्तर

1

क्योंकि यह तरीका विनिर्देश लिखा गया था।

+2

फिर यह क्यों लिखा गया है। सब कुछ एक कारण के साथ आता है। –

+1

@paladin_t - जरूरी नहीं। कभी-कभी यह लेखक की वरीयता है। –

+0

@ हॉट लिक्स, यह उचित है। –

6

जेएसओएन प्रारूप जानबूझकर जावास्क्रिप्ट ऑब्जेक्ट शाब्दिक वाक्यविन्यास और सरणी शाब्दिक वाक्यविन्यास के उप-समूह पर आधारित है, और जावास्क्रिप्ट ऑब्जेक्ट्स केवल तारों के रूप में तार हो सकते हैं - इस प्रकार JSON कुंजी भी तार हैं। (ठीक है, आप जावास्क्रिप्ट ऑब्जेक्ट कुंजियों के रूप में उपयोग संख्याओं को सॉर्ट कर सकते हैं, लेकिन वास्तव में वे तारों में परिवर्तित हो जाते हैं।)

ध्यान दें कि JSON का बिंदु यह है कि यह डेटा का एक स्ट्रिंग प्रस्तुतिकरण है जिसमें लिखित प्रोग्रामों के बीच आसान विनिमय की अनुमति है अलग-अलग वातावरणों में अलग-अलग मशीनों पर चलने वाली विभिन्न भाषाएं। यदि आप किसी ऑब्जेक्ट को कुंजी के रूप में उपयोग करना चाहते हैं तो उस ऑब्जेक्ट को किसी भी तरह ट्रांसमिशन के लिए स्ट्रिंग के रूप में प्रदर्शित किया जाना चाहिए, लेकिन फिर प्राप्त करने वाली भाषा को ऑब्जेक्ट्स को चाबियों के रूप में उपयोग करने में सक्षम होना चाहिए और इसका मतलब यह होगा कि आपको आवश्यकता होगी उन भाषाओं के लिए जेएसओएन का एक सीमित सबसेट जो सिर्फ एक गड़बड़ होगा।

नहीं, यह नहीं है "JSON को ध्यान में रखते जावास्क्रिप्ट का एक हिस्सा है।" नए ब्राउज़र JSON बनाने और पार्स करने के तरीकों को प्रदान करते हैं, लेकिन वे भाषा का हिस्सा नहीं हैं, सिवाय इसके कि JSON एक स्ट्रिंग प्रारूप है और जावास्क्रिप्ट स्ट्रिंग कर सकता है। JSON हमेशा एक स्ट्रिंग प्रस्तुति - इसे जावास्क्रिप्ट (या अन्य भाषाओं) के भीतर उपयोग के लिए ऑब्जेक्ट बनाने के लिए पार्स किया जाना चाहिए और एक बार ऐसा होता है कि जावास्क्रिप्ट (या अन्य भाषाएं) परिणामी ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट के समान मानती हैं।

(भी ध्यान रखें कि JSON की एक विशेष सा जरूरी कोई भी कुंजियां नहीं:। यह सिर्फ एक सरणी हो सकता है, '["one","two","three"]' की तरह)

+0

स्ट्रिंग लगभग अलग-अलग भाषाओं में सीधे समर्थित है, लेकिन ऑब्जेक्ट को अनुकूलित किया जाना चाहिए। हमें मूल्य से वस्तु से निपटने के लिए कुछ करना है, जो कि कुंजी के लिए एक ही तरीका हो सकता है। अगर हमने सीमित कुंजी की भाषा को पार करने की भाषा को पार करने की वजह से केवल एक स्ट्रिंग हो सकती है, तो यह कहना था कि मूल्य भी इस तरह सीमित था। मैं इसे जावास्क्रिप्ट में उपाध्यक्ष मानता हूं। –

+1

JSON _data_ के आदान-प्रदान के लिए डिज़ाइन किया गया है। यदि आपके एप्लिकेशन का डेटा इतना जटिल है कि आपको स्ट्रिंग-आधारित कुंजी-नामों का उपयोग करके इसका प्रतिनिधित्व करने का कोई तरीका नहीं मिल रहा है तो मैं सुझाव दूंगा कि आप चीजों को अपने लिए कठिन बना रहे हैं। यदि आपको लगता है कि आपके पास ऑब्जेक्ट्स के रूप में ऑब्जेक्ट्स होनी चाहिए तो आप JSON में ऐसा कर सकते हैं जिसमें एक (नेस्टेड) ​​'कुंजी' ऑब्जेक्ट शामिल है जो स्ट्रिंग-आधारित प्रॉपर्टी नाम ऑब्जेक्ट्स पर मैप करता है ताकि वे ऑब्जेक्ट्स "आभासी कुंजी" बन जाए। आपके मूल प्रश्न का उत्तर, "केवल तार क्यों?" ऐसा इसलिए है क्योंकि जेएसओएन के उद्देश्य के लिए यह सब कुछ जरूरी है और यही मूल डिजाइनर बस गया है। – nnnnnn

1

मुख्य कारण JSON प्रतिनिधित्व के आविष्कारक के अनुसार, है

डगलस Crockford द्वारा इस talk संदर्भ लें, जो JSON r की आविष्कारक है "जबकि json डेटा पार्स करने, इस बात की संभावना/संभावना है कि, key आप उल्लेख करने के लिए प्रयोग कर रहे हैं एक value अपने पार्स भाषा में एक reserved word हो सकता है" epresentation।

उदाहरण: { id: 1234, name: "foo", do: "somthing" }

के बाद से JSON एक क्रॉस भाषा अनुकूलता हम कई भाषा में इस डेटा सेट का उपयोग कर सकते है। लेकिन, do शब्द Javascript में एक कीवर्ड है। पार्सिंग करते समय यह सिंटैक्स त्रुटि में समाप्त हो जाएगा।

+0

हालांकि अधिकांश प्रोग्रामिंग भाषाएं चाबियों के रूप में संख्याओं का उपयोग नहीं करती हैं, लेकिन संख्याओं की अनुमति नहीं है। –

संबंधित मुद्दे

 संबंधित मुद्दे