2016-03-28 6 views
5

तो मैं प्रस्तावित जावास्क्रिप्ट विशेषताओं पर पढ़ रहा हूं, और मुझे चिंता है कि ऑब्जेक्ट लिटलल्स और एरे में अल्पविराम समर्थन का पीछा कर रहा है।कमांड ब्रेक जेएसओएन का पीछा करेंगे?

पैरामीटर के लिए, पिछला अल्पविराम यहां से संबंधित नहीं है, तो चलो इसे अनदेखा करें। मैं संस्करण नियंत्रण लाभ को समझता हूं, लेकिन मुझे चिंता है कि यह JSON पर प्रतिक्रिया कैसे करेगा।

const arr = [ 
    'red', 
    'green', 
    'blue', 
]; 

यह मान्य हो जाएगा।

लेकिन जब आप JSON वाक्यविन्यास वापस करते हैं तो क्या होगा? जेएसओएन आरएफसी द्वारा समर्थित है, इसलिए मुझे संदेह है कि जेएसओएन पिछली कॉमा का समर्थन करेगा। हो सकता है कि एक दिन ..

लेकिन यह कैसे जावास्क्रिप्ट की तरह कुछ लौट संभाल लेंगे:

const jsonReturn = [{ 
    "derp":1 
}, { 
    "foo":"bar" 
}, { 
    "slide":true, 
},]; 

अनुगामी आंतरिक रूप से हटाया जा अल्पविराम होगा अगर हेडर सामग्री प्रकार JSON है या अल्पविराम सब कुछ तोड़ अनुगामी होगा?

+0

संक्षिप्त उत्तर: पिछला अल्पविराम अमान्य JSON है, लेकिन अधिकांश जेएस पार्सर्स उन पर कूदते हैं (जब जावास्क्रिप्ट _not_ JSON के रूप में व्याख्या की जाती है)। –

+0

ठीक है, तो "तकनीकी रूप से" (मैं उस शब्द को जितना संभव हो उतना ढीला उपयोग करता हूं) आप कह रहे हैं कि यदि पिछला कॉमा जेएसओएन के रूप में वापस किया जाता है, तो पार्सर को इसे छोड़ना चाहिए और फिर भी अनुरोधकर्ता को वैध JSON वापस करना चाहिए? –

+2

आप वास्तव में जेएसओएन का उपयोग नहीं कर रहे हैं, आप जेएसओ का संदर्भ दे रहे हैं। यदि आपके पास यहां कोई JSON पार्सर मारा गया था, तो यह उल्टी हो जाएगा। हालांकि, इसे बाहर डंप करना जैसे कि यह एक जेएसओ था, यह ठीक होना चाहिए (अधिकांश जेएस पार्सर्स द्वारा)। –

उत्तर

7

आप किसी भी समस्या का सामना नहीं करेंगे, क्योंकि जेएसओएन और जेएस स्रोत के पास एक दूसरे के साथ कुछ लेना देना नहीं है।

जेएसओएन (और उदाहरण के लिए नहीं) पीछे पीछे अल्पविराम का समर्थन नहीं करता है। The current JSON spec स्पष्ट रूप से दिखाता है कि अल्पविराम केवल किसी ऑब्जेक्ट या सरणी के मानों के बीच हो सकता है।

यदि जेएस कॉमा के पीछे समर्थन के लिए समर्थन पेश करता है, तो ऑब्जेक्ट का स्रोत प्रतिनिधित्व और धारावाहिक संस्करण जो मुख्य रूप से असंबंधित है। अधिकतर ब्राउज़र आज एक अनुगामी अल्पविराम को स्वीकार करेंगे, लेकिन सभी अल्पविराम के वास्तविक वस्तु (dict/हैश या struct) प्रतिनिधित्व में छोड़ दिए जाते हैं:

> var foo = {bar: 1, baz: 2,}; 
< undefined 
> foo 
< Object {bar: 1, baz: 2} 

आज भी पीछे अल्पविराम बस ठीक काम करता है के साथ एक वस्तु serializing:

> JSON.stringify({bar: 1, baz: 2,}) 
< "{"bar":1,"baz":2}" 

अल्पविराम का एकमात्र स्रोत पार्स करने के लिए कर रहे हैं और क्रम के वस्तु प्रतिनिधित्व में मौजूद नहीं हैं।

+0

क्या यह ऑब्जेक्ट्स की सरणी में पिछली कॉमा पर लागू होगा? –

+1

@ स्टर्लिंगएचर बिल्कुल। एक बार जब वे तत्काल हो जाते हैं तो न तो ऑब्जेक्ट्स और न ही एरे वास्तव में अल्पविराम का उपयोग करते हैं। यह पूरी तरह से पार्सर के लिए है और पार्सर चुन सकता है कि पिछली कॉमा को पहचानना है या नहीं। आईई नहीं करता है, अधिकांश अन्य ब्राउज़र करते हैं। – ssube