JSON वेबसाइट पर राज्य मशीन आरेख के अनुसार , केवल बच गए दोहरे-उद्धरण वर्णों की अनुमति है, एकल-उद्धरण नहीं। एकल उद्धरण वर्णों को भागने की आवश्यकता नहीं है:
अद्यतन - रुचि रखने वालों के लिए अधिक जानकारी:
डगलस क्रॉफोर्ड विशेष रूप से यह नहीं कहते हैं कि JSON विनिर्देश स्ट्रिंग्स के भीतर एकल उद्धरण से बचने की अनुमति क्यों नहीं देता है। हालाँकि, जावास्क्रिप्ट के जेंसन ई: द गुड पार्ट्स में जेन्स की अपनी चर्चा के दौरान , वे लिखते हैं:
JSON के डिजाइन लक्ष्य न्यूनतम, पोर्टेबल, पाठ्य और जावास्क्रिप्ट के उपसमुच्चय थे। इंटरपॉर्ट करने के लिए हमें जितना कम सहमत होने की आवश्यकता है, उतनी ही आसानी से हम इंटरोपर्ट कर सकते हैं।
इसलिए शायद उन्होंने केवल दो-उद्धरणों का उपयोग करके स्ट्रिंग को परिभाषित करने की अनुमति देने का फैसला किया क्योंकि यह एक कम नियम है जो सभी JSON कार्यान्वयनों पर सहमत होना चाहिए। नतीजतन, स्ट्रिंग के भीतर एक एकल उद्धरण चरित्र के लिए गलती से स्ट्रिंग को समाप्त करना असंभव है, क्योंकि परिभाषा के अनुसार एक स्ट्रिंग को केवल दोहरे-भाव वाले चरित्र द्वारा समाप्त किया जा सकता है। इसलिए औपचारिक विनिर्देश में एकल उद्धरण चरित्र से बचने की अनुमति देने की आवश्यकता नहीं है।
थोड़ा और गहरा
खोदते हुए , Crockford's
org.json जावा के लिए JSON का कार्यान्वयन अधिक स्वीकार्य है और
यह आपके उद्धरण की अनुमति देता है:
स्टर्लिंग विधियों द्वारा निर्मित ग्रंथों को JSON सिंटैक्स नियमों के कड़ाई से अनुरूप है। निर्माता उन ग्रंथों में अधिक क्षमा कर रहे हैं जिन्हें वे स्वीकार करेंगे:
...
- स्ट्रिंग्स को 'एकल उद्धरण' के साथ उद्धृत किया जा सकता है।
JSONTokener स्रोत कोड द्वारा इसकी पुष्टि की गई है । nextString
विधि बच गए एकल उद्धरण वर्ण और बस डबल उद्धरण वर्ण की तरह व्यवहार करता है उन्हें स्वीकार करता है:
public String nextString(char quote) throws JSONException {
char c;
StringBuffer sb = new StringBuffer();
for (;;) {
c = next();
switch (c) {
...
case '\\':
c = this.next();
switch (c) {
...
case '"':
case '\'':
case '\\':
case '/':
sb.append(c);
break;
...
विधि के शीर्ष पर एक जानकारीपूर्ण टिप्पणी है:
औपचारिक JSON प्रारूप एकल उद्धरणों में तार की अनुमति नहीं देता है, लेकिन कार्यान्वयन को उन्हें स्वीकार करने की अनुमति है।
इसलिए कुछ कार्यान्वयन एकल उद्धरण स्वीकार करेंगे - लेकिन आपको इस पर भरोसा नहीं करना चाहिए। कई लोकप्रिय कार्यान्वयन इस संबंध में काफी प्रतिबंधात्मक हैं और JSON को अस्वीकार कर देंगे जिसमें एकल उद्धृत स्ट्रिंग्स और / या एकल उद्धरण शामिल हैं।
अंत में इसे मूल प्रश्न पर वापस टाई करने के लिए, jQuery.parseJSON
पहले ब्राउज़र के देशी JSON पार्सर या लोड किए गए पुस्तकालय जैसे कि json2.js का उपयोग करने का प्रयास करते हैं, जहां लागू होता है (जो कि एक तरफ ध्यान दें कि लाइब्रेरी jQuery तर्क पर आधारित है यदि JSON
परिभाषित नहीं है) । इस प्रकार jQuery केवल उस अंतर्निहित कार्यान्वयन के रूप में अनुमत हो सकता है:
parseJSON: function( data ) {
...
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
...
jQuery.error( "Invalid JSON: " + data );
},
जहां तक मुझे पता है कि ये कार्यान्वयन केवल आधिकारिक JSON विनिर्देशन का पालन करते हैं और एकल उद्धरण स्वीकार नहीं करते हैं, इसलिए न तो jQuery करता है।