JSON कुंजी नाम में कौन से वर्ण मान्य / अमान्य हैं?


151

जावास्क्रिप्ट ऑब्जेक्ट्स या JSON स्ट्रिंग्स के लिए प्रमुख नामों में कोई निषिद्ध वर्ण हैं? या ऐसे पात्र जिन्हें भागने की जरूरत है?

अधिक विशिष्ट होने के लिए, मैं "$", "-" और प्रमुख नामों में स्थान का उपयोग करना चाहूंगा।


मुझे लगता है कि आंशिक रूप से इस जवाब का आपके कूटबन्धन के तरीके के साथ क्या करना है। उदाहरण के लिए, UTF8 में ANSI बनाम अलग-अलग वर्ण हैं।
invalidsyntax

4
आप obj['whatever']संकेतन का उपयोग करते हुए जेएस में किसी भी 'कुंजी' का उपयोग कर सकते हैं । लेकिन obj.whateverसंस्करण के लिए केवल नियमित अल्फ़ान्यूमेरिक कुंजी का उपयोग किया जा सकता है ।
मार्क बी

4
@invalidsyntax: JSON परिभाषा के अनुसार यूनिकोड है। इसके अलावा, एएनएसआई एक एन्कोडिंग नहीं है, यह एक चरित्र सेट है, इसलिए तुलना यूनिकोड-बनाम-एएनएसआई होनी चाहिए, न कि यूटीएफ-8-बनाम-एएनएसआई।
मार्सेलो कैंटोस

1
पुरानी चर्चा लेकिन, ASCII (जिसे लोग अक्सर ANSI द्वारा संदर्भित करते हैं) एक एन्कोडिंग है और इसके शीर्ष पर यह एक वर्ण सेट को भी परिभाषित करता है।
त्रिनिदाद

जवाबों:


167

नहीं, कोई भी वैध स्ट्रिंग एक वैध कुंजी है। "जब तक आप इससे बचते हैं, तब तक यह हो सकता है :

{"The \"meaning\" of life":42}

शायद एक मौका है कि आप कुछ भाषाओं में ऐसे मूल्यों को लोड करने में कठिनाइयों का सामना करेंगे, जो ऑब्जेक्ट फ़ील्ड नामों के साथ कुंजियों को जोड़ने का प्रयास करते हैं। हालाँकि मुझे ऐसे किसी भी मामले की जानकारी नहीं है।


धन्यवाद! किसी भी अन्य पात्रों को बच निकलने की आवश्यकता होगी? जैसे: या; ?
क्रिस्टोफ़

11
उन नहीं। जावास्क्रिप्ट में भागने की जो भी जरूरत है वह आमतौर पर JSON में चाहिए। यह घोड़े के मुंह से प्राप्त करने के लिए सबसे अच्छा है, हालांकि, json.org पर। पूरे स्पेस एंड-टू-एंड को पढ़ने में लगभग एक मिनट लगता है।
मार्सेलो कैंटोस

3
यह एक अच्छा जवाब नहीं है। किस तरह के पात्रों से बचने की आवश्यकता है? कौन से पात्र बच सकते हैं, लेकिन बचना नहीं है?
डैनियल डब्ल्यू।

क्या कोई यह स्पष्ट कर सकता है कि इसमें यूनिकोड अशक्त चरित्र (U + 0000, सादा "नल बाइट" जैसे UTF-8) आदि चीजें शामिल हैं? दोनों json.org और लिंक किए गए आधिकारिक / औपचारिक ECMA विनिर्देश पीडीएफ से प्रतीत होता है कि हां, जो JSON में मान्य हैं, यहां तक ​​कि उनके शाब्दिक रूपों में (न केवल \u four-hex-digitsफॉर्म में)।
मृत्युंजय

1
@OutofOrbit क्या आप इसे किसी अनकही वस्तु में लोड कर सकते हैं?
मार्सेलो कैंटोस

54

किसी भी समस्या से बचने के लिए JSON डेटा में निम्न वर्णों से बच जाना चाहिए

' एकल बोली

”बोली

\ backslash

सभी नियंत्रण वर्ण जैसे \ n \ t

JSON से निपटने के लिए JSON Parser आपकी मदद कर सकता है।

संपादित करें: यहाँ ओपी लिंक के मृत होने के बाद से एक प्रतिस्थापन JSON पार्सर है


5
हाय अरुण, एकल उद्धरणों से बचने की आवश्यकता नहीं है। इनसे बचकर भागने से सख्त JSON पार्सर्स को अपवाद फेंकने में मदद मिलेगी। Json.org के स्ट्रिंग सेक्शन का संदर्भ लें, हालाँकि आपको JSON स्ट्रिंग (लेकिन JSON स्ट्रिंग नहीं) के अंदर आने से बचने की आवश्यकता होगी।
एलेक्स कीस्मिथ

5
@AlexKey आप पूरी तरह से सही हैं! अरुण, आप इसे jsonlint.com पर JSON { "singlequotetest": "something here isn\'t right"}बनाम{ "singlequotetest": "Fixing here what wasn't right"}
Adrien Be

@ अरुण राणा - कोई चिंता नहीं।
एलेक्स कीस्मिथ

3
{"* ~ @ # $% ^ & * () _ + => </?": "एक वैध जसन है"}
अभि

45
{"🐶🔫": "not nice, but still valid json"}
मार्सेलो कैंटोस

12

यह ध्यान देने योग्य है कि संख्याओं के साथ चाबियाँ शुरू करते समय मान्य है, यह कुछ अनपेक्षित मुद्दों का कारण बन सकता है।

उदाहरण:

var testObject = {
    "1tile": "test value"
};
console.log(testObject.1tile); // fails, invalid syntax
console.log(testObject["1tile"]; // workaround

6
मैं वास्तव में आशा करता हूं कि, माइक्रोसॉफ्ट के 2017/18 के इस युग में, वे उन सभी दर्द के लिए पछता रहे हैं जो उन्होंने भड़काए हैं।
21

1
उनके मेट्रिक्स आईडी मापदंडों को देखें: dev.applicationinsights.io/apiexplorer/… --- उनके क्षेत्रों के 15 या 20 में उनके json फ़ील्ड नामों में कई फ़ॉरवर्ड स्लैश हैं। जबकि कार्न्स समाधान एक विशिष्ट क्षेत्र के लिए काम करता है, मैं इसे 1tile के उप-क्षेत्र के लिए काम करने के लिए प्राप्त नहीं कर सकता। उदाहरण के लिए, बाद की बिंदी मेरे लिए अपरिभाषित है।
जॉन लुजादर

क्यों IE वहाँ उल्लेख किया है? हर ECMAScript कार्यान्वयन में संख्यात्मक के साथ शुरू होने वाले पहचानकर्ता अवैध हैं।
m93a 17

@ m93a IE इंटरनेट एक्सप्लोरर के लिए एक संक्षिप्त रूप में नहीं है ... शब्दों का बुरा विकल्प: /
karns

इसका सबसे अच्छा उत्तर होना चाहिए
जो एलिया

7

यूनिकोड कोडपॉइंट्स U + D800 से U + DFFF से बचना चाहिए: वे यूनिकोड में अमान्य हैं क्योंकि वे UTF-16 सरोगेट जोड़े के लिए आरक्षित हैं। कुछ JSON एनकोडर / डिकोडर उन्हें U + FFFD से बदल देंगे। उदाहरण के लिए देखें कि गो भाषा और इसकी JSON लाइब्रेरी उनके साथ कैसे व्यवहार करती है

तो अकेले "\ uD800F" से बचें (सरोगेट जोड़े में नहीं)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.