JSON केवल एक जोड़ी की कुंजी होने के लिए string
क्यों अनुमति देता है? अन्य प्रकार जैसे null
, number
, bool
, object
, array
क्यों नहीं? JSON को ध्यान में रखते हुए जावास्क्रिप्ट से कड़ाई से संबंधित है, क्या मैं जावास्क्रिप्ट विनिर्देश (ईसीएमए -262) के कारण का निष्कर्ष निकाल सकता हूं? मैं पूरी तरह से जावास्क्रिप्ट के लिए एक नौसिखिया हूँ, क्या आप इसे इंगित करने में मेरी मदद कर सकते हैं।क्यों JSON केवल स्ट्रिंग की कुंजी को अनुमति देता है?
उत्तर
क्योंकि यह तरीका विनिर्देश लिखा गया था।
फिर यह क्यों लिखा गया है। सब कुछ एक कारण के साथ आता है। –
@paladin_t - जरूरी नहीं। कभी-कभी यह लेखक की वरीयता है। –
@ हॉट लिक्स, यह उचित है। –
जेएसओएन प्रारूप जानबूझकर जावास्क्रिप्ट ऑब्जेक्ट शाब्दिक वाक्यविन्यास और सरणी शाब्दिक वाक्यविन्यास के उप-समूह पर आधारित है, और जावास्क्रिप्ट ऑब्जेक्ट्स केवल तारों के रूप में तार हो सकते हैं - इस प्रकार JSON कुंजी भी तार हैं। (ठीक है, आप जावास्क्रिप्ट ऑब्जेक्ट कुंजियों के रूप में उपयोग संख्याओं को सॉर्ट कर सकते हैं, लेकिन वास्तव में वे तारों में परिवर्तित हो जाते हैं।)
ध्यान दें कि JSON का बिंदु यह है कि यह डेटा का एक स्ट्रिंग प्रस्तुतिकरण है जिसमें लिखित प्रोग्रामों के बीच आसान विनिमय की अनुमति है अलग-अलग वातावरणों में अलग-अलग मशीनों पर चलने वाली विभिन्न भाषाएं। यदि आप किसी ऑब्जेक्ट को कुंजी के रूप में उपयोग करना चाहते हैं तो उस ऑब्जेक्ट को किसी भी तरह ट्रांसमिशन के लिए स्ट्रिंग के रूप में प्रदर्शित किया जाना चाहिए, लेकिन फिर प्राप्त करने वाली भाषा को ऑब्जेक्ट्स को चाबियों के रूप में उपयोग करने में सक्षम होना चाहिए और इसका मतलब यह होगा कि आपको आवश्यकता होगी उन भाषाओं के लिए जेएसओएन का एक सीमित सबसेट जो सिर्फ एक गड़बड़ होगा।
नहीं, यह नहीं है "JSON को ध्यान में रखते जावास्क्रिप्ट का एक हिस्सा है।" नए ब्राउज़र JSON बनाने और पार्स करने के तरीकों को प्रदान करते हैं, लेकिन वे भाषा का हिस्सा नहीं हैं, सिवाय इसके कि JSON एक स्ट्रिंग प्रारूप है और जावास्क्रिप्ट स्ट्रिंग कर सकता है। JSON हमेशा एक स्ट्रिंग प्रस्तुति - इसे जावास्क्रिप्ट (या अन्य भाषाओं) के भीतर उपयोग के लिए ऑब्जेक्ट बनाने के लिए पार्स किया जाना चाहिए और एक बार ऐसा होता है कि जावास्क्रिप्ट (या अन्य भाषाएं) परिणामी ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट के समान मानती हैं।
(भी ध्यान रखें कि JSON की एक विशेष सा जरूरी कोई भी कुंजियां नहीं:। यह सिर्फ एक सरणी हो सकता है, '["one","two","three"]'
की तरह)
स्ट्रिंग लगभग अलग-अलग भाषाओं में सीधे समर्थित है, लेकिन ऑब्जेक्ट को अनुकूलित किया जाना चाहिए। हमें मूल्य से वस्तु से निपटने के लिए कुछ करना है, जो कि कुंजी के लिए एक ही तरीका हो सकता है। अगर हमने सीमित कुंजी की भाषा को पार करने की भाषा को पार करने की वजह से केवल एक स्ट्रिंग हो सकती है, तो यह कहना था कि मूल्य भी इस तरह सीमित था। मैं इसे जावास्क्रिप्ट में उपाध्यक्ष मानता हूं। –
JSON _data_ के आदान-प्रदान के लिए डिज़ाइन किया गया है। यदि आपके एप्लिकेशन का डेटा इतना जटिल है कि आपको स्ट्रिंग-आधारित कुंजी-नामों का उपयोग करके इसका प्रतिनिधित्व करने का कोई तरीका नहीं मिल रहा है तो मैं सुझाव दूंगा कि आप चीजों को अपने लिए कठिन बना रहे हैं। यदि आपको लगता है कि आपके पास ऑब्जेक्ट्स के रूप में ऑब्जेक्ट्स होनी चाहिए तो आप JSON में ऐसा कर सकते हैं जिसमें एक (नेस्टेड) 'कुंजी' ऑब्जेक्ट शामिल है जो स्ट्रिंग-आधारित प्रॉपर्टी नाम ऑब्जेक्ट्स पर मैप करता है ताकि वे ऑब्जेक्ट्स "आभासी कुंजी" बन जाए। आपके मूल प्रश्न का उत्तर, "केवल तार क्यों?" ऐसा इसलिए है क्योंकि जेएसओएन के उद्देश्य के लिए यह सब कुछ जरूरी है और यही मूल डिजाइनर बस गया है। – nnnnnn
मुख्य कारण JSON
प्रतिनिधित्व के आविष्कारक के अनुसार, है
डगलस Crockford द्वारा इस talk संदर्भ लें, जो JSON r की आविष्कारक है "जबकि json
डेटा पार्स करने, इस बात की संभावना/संभावना है कि, key
आप उल्लेख करने के लिए प्रयोग कर रहे हैं एक value
अपने पार्स भाषा में एक reserved word
हो सकता है" epresentation।
उदाहरण: { id: 1234, name: "foo", do: "somthing" }
के बाद से JSON एक क्रॉस भाषा अनुकूलता हम कई भाषा में इस डेटा सेट का उपयोग कर सकते है। लेकिन, do
शब्द Javascript
में एक कीवर्ड है। पार्सिंग करते समय यह सिंटैक्स त्रुटि में समाप्त हो जाएगा।
हालांकि अधिकांश प्रोग्रामिंग भाषाएं चाबियों के रूप में संख्याओं का उपयोग नहीं करती हैं, लेकिन संख्याओं की अनुमति नहीं है। –
- 1. पैरामीटरेटेड थ्रेडस्टार्ट केवल ऑब्जेक्ट पैरामीटर की अनुमति क्यों देता है?
- 2. क्यों रूबी केवल कुछ ऑपरेटर ओवरलोडिंग को अनुमति देता है
- 3. क्यों संकलक रूपांतरण को संकुचित करने की अनुमति देता है
- 4. क्यों स्ट्रिंग स्ट्रिंग की अनुमति है और कंपाइलर द्वारा int int की अनुमति नहीं है?
- 5. क्यों 'टी स्ट्रिंग को बढ़ाता है' की अनुमति है लेकिन चेतावनी देता है?
- 6. सी ++ एक स्ट्रिंग को एक पूर्णांक को असाइन करने की अनुमति क्यों देता है?
- 7. क्या कोई शब्दकोश <स्ट्रिंग, ऑब्जेक्ट> संग्रह है जो एकाधिक कुंजी की अनुमति देता है?
- 8. Jquery UI दिनांक पिकर ... केवल शुक्रवार की अनुमति देता है?
- 9. विंडोज़ केवल एक एप्लिकेशन को वेबकैम तक पहुंचने की अनुमति क्यों देता है?
- 10. केवल सी ++ में परिभाषित व्यवहार की अनुमति देता है?
- 11. सी # क्रमबद्ध JSON स्ट्रिंग कुंजी
- 12. क्यों हैशटेबल शून्य कुंजी या मानों की अनुमति नहीं देता है?
- 13. विजुअल स्टूडियो केवल एक परियोजना में प्रति फ़ाइल एक लिंक की अनुमति क्यों देता है?
- 14. एम्बर राउटर केवल पत्ती मार्गों पर नेविगेट करने की अनुमति क्यों देता है?
- 15. एनएसएसटींग अपरिवर्तनीय अपने मूल्यों को बदलने की अनुमति देता है?
- 16. टाइपस्क्रिप्ट क्यों चेतावनी के बिना स्ट्रिंग से संख्या में कनवर्ट करने की अनुमति देता है
- 17. रूबी attr_reader किसी को स्ट्रिंग वैरिएबल को संशोधित करने की अनुमति देता है यदि <<
- 18. JMock अन्य विधि को कॉल करने की अनुमति देता है
- 19. आईओएस - NSLocalizedString केवल कुंजी स्ट्रिंग
- 20. रेगेक्स एक स्ट्रिंग को केवल 0 - 9 तक सीमित करने की अनुमति देता है और लंबाई 45 से 45
- 21. एसटीएल <map> डुप्लिकेट जोड़े की अनुमति देता है?
- 22. साइटकोर विशिष्ट क्षेत्रों में सामग्री को प्रकाशित करने की अनुमति देता है केवल
- 23. जावा JTabbedPane टैब को केवल तभी स्विच करने की अनुमति देता है जब सही
- 24. स्केपर सभी डोमेनों को अनुमति देता है
- 25. JSON क्यों महत्वपूर्ण है?
- 26. आईई केवल ब्राउज़र (या संस्करण) है जो फ़्लैश ऑब्जेक्ट मैनिपुलेशन की अनुमति नहीं देता है?
- 27. .NET गणना पिछले क्षेत्र में अल्पविराम की अनुमति देता है
- 28. क्यों जावा एनम में बराबर (ऑब्जेक्ट) को ओवरराइड करने की अनुमति नहीं देता है?
- 29. ओएस एक्स एक ही टीसीपी पोर्ट को दो बार सुनने की अनुमति क्यों देता है?
- 30. सी # आंतरिक होने पर विधियों/सदस्यों को सार्वजनिक होने की अनुमति क्यों देता है
मैं नहीं कहूंगा कि JSON जावास्क्रिप्ट का हिस्सा है। इसकी डेटा संरचनाएं जावास्क्रिप्ट में पाए गए ऑब्जेक्ट और सरणी शाब्दिक नोटेशन पर आधारित हैं, लेकिन इसका अस्तित्व ईसीएमए -262 से स्वतंत्र है। –