2011-01-02 11 views
6

यदि मैं क्रोम या फ़ायरबग में जावास्क्रिप्ट कंसोल में इसे चलाता हूं, तो यह ठीक काम करता है।JSON मानक में स्ट्रिंग में अनुमत डबल कोट्स और बैकस्लाश क्यों नहीं हैं?

JSON.parse('"\u0027"') // Escaped single-quote 

लेकिन अगर मैं एक Javascript कंसोल में इन 2 लाइनों के दोनों चलाने के लिए, यह एक त्रुटि फेंकता है।

JSON.parse('"\u0022"') // Escaped double-quote 
JSON.parse('"\u005C"') // Escaped backslash 

RFC 4627 section 2.5 सूचित करते हैं कि \ और " अनुमति दी जाती है पात्रों के रूप में जब तक वे सही तरीके से छोड़े रहे हैं लगता है। मैंने जिन 2 ब्राउज़रों को आजमाया है, वे इसे अनुमति देने की प्रतीत नहीं करते हैं। क्या मैं यहां कुछ गलत कर रहा हूं या क्या उन्हें तारों में वास्तव में अनुमति नहीं है? मैंने क्रमशः \u0022 और \u005C के स्थान पर \" और \\ का उपयोग करने का प्रयास किया है।

मुझे लगता है कि मैं बस कुछ गलत कर रहा हूं, क्योंकि मुझे यह विश्वास करना मुश्किल लगता है कि जेएसओएन इन पात्रों को तारों में अनुमति नहीं देगा, खासकर जब विनिर्देश कुछ भी उल्लेख नहीं करता है जिसे मैं कह सकता हूं 'अनुमति नहीं है।

उत्तर

8

आपको बैकस्लैश उद्धृत करने की आवश्यकता है!

कि जो हम एक गुलाब

किसी अन्य नाम से बुलाते गंध के रूप में मिठाई

एक दोहरे उद्धरण एक दोहरे उद्धरण है, कोई बात नहीं आप इसे कैसे स्ट्रिंग निरंतर में व्यक्त करते हैं। यदि आप निरंतर भीतर अपने \u अभिव्यक्ति से पहले बैकस्लैश डालते हैं, तो प्रभाव बैकस्लैश-उद्धृत डबल-कोट का है, जो वास्तव में आपको मिला है।

आपके प्रश्न के बारे में सबसे दिलचस्प बात यह है कि यह मुझे यह समझने में मदद करता है कि मैंने जो भी जावास्क्रिप्ट स्ट्रिंग पार्सर कभी लिखा है वह गलत है।

3

आप बैकस्लैश और डबल-कोट से बच नहीं रहे हैं, जैसा कि जावास्क्रिप्ट पार्सर द्वारा व्याख्या किया जा रहा है। अपेक्षा के अनुरूप

JSON.parse('"\\\u0022"') 
JSON.parse('"\\\""') 

और

JSON.parse('"\\\u005C"') 
JSON.parse('"\\\\"') 

काम करते हैं।

+0

'JSON.parse' ने मेरी मदद की! धन्यवाद ...: डी –

4

जावास्क्रिप्ट जेएसओएन पार्सर तक पहुंचने से पहले यूनिकोड से बचने के अनुक्रमों की व्याख्या कर रहा है।

  • '"\u0027"' गैर उद्धृत पहली बार (जावास्क्रिप्ट द्वारा):: यह एक समस्या बन गया है "'"
    दूसरी बार (JSON पार्सर द्वारा) के रूप में मान्य JSON स्ट्रिंग का प्रतिनिधित्व: '

  • '"\u0022"' पहले गैर उद्धृत समय (जावास्क्रिप्ट द्वारा): """
    जेएसओएन पार्सर इस अनजान संस्करण """ को अमान्य JSON (अंतिम उद्धरण चिह्न की अपेक्षा नहीं करता) के रूप में देखता है।"\"
    JSON पार्सर भी इस गैर उद्धृत संस्करण "\" के रूप में अमान्य JSON देखता है (दूसरा उद्धरण चिह्न बैकस्लैश-एस्केप्ड है और इसलिए स्ट्रिंग समाप्त नहीं करता):

  • '"\u005C"' (जावास्क्रिप्ट) के द्वारा पहली बार गैर उद्धृत।

इस के लिए ठीक आप शायद सिर्फ JSON पार्सर का उपयोग नहीं होगा, एस्केप अनुक्रम से बचने के लिए \\u.... हकीकत में के रूप में, है, तथापि। सही संदर्भ में उपयोग किया जाता है (इसे कोष्ठक के भीतर लपेटकर सुनिश्चित किया जाता है, सभी JSON मान्य जावास्क्रिप्ट है।

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