क्या आप JSON ऑब्जेक्ट में पिछली कॉमा का उपयोग कर सकते हैं?

मैन्युअल रूप से JSON ऑब्जेक्ट या सरणी उत्पन्न करते समय, ऑब्जेक्ट या सरणी में अंतिम आइटम पर पिछली कॉमा छोड़ना अक्सर आसान होता है। उदाहरण के लिए, स्ट्रिंग्स की सरणी से आउटपुट करने के लिए कोड कैसा दिख सकता है (एक सी ++ में स्यूडोकोड की तरह):

s.append("[");
for (i = 0; i < 5; ++i) {
    s.appendF("\"%d\",", i);
}
s.append("]");

आपको एक स्ट्रिंग दे रहा है

[0,1,2,3,4,5,]

क्या यह अनुमति है?

321
आईई 8 में दिलचस्प (या भयावहता से) मैंने पाया है कि चेतावनी ([1, 2, 3,]। लम्बाई) "4" प्रदर्शित करेगा।
जोड़ा लेखक Daniel Earwicker, स्रोत
मैं यह भी सोच रहा था, इसलिए यह एक बिल्कुल उचित सवाल है।
जोड़ा लेखक hoju, स्रोत
सामान्य प्रोग्रामिंग प्रश्नों के लिए सोशल बुकमार्क के रूप में एसओ का उपयोग करने के विचार के जवाब में: ऐसी सामग्री जोड़ने के बारे में क्या गलत हो सकता है जो अनिवार्य रूप से साइट पर अधिक प्रोग्रामर (और उनकी विशेषज्ञता) लाएगा?
जोड़ा लेखक dclowd9901, स्रोत
जैसा कि जेफ ने कहा था, मुझे लगता है कि SO को उन चीजों की 'नोटबुक' के रूप में उपयोग करने के लिए बिल्कुल ठीक है जिसे आपको कुछ समय बिताना पड़ा था। निश्चित रूप से, यह उन प्रकार के सामानों के सरल अंत में है, लेकिन मुझे अभी भी यह उचित लगता है, खासकर जब से अलग जावास्क्रिप्ट इंजन इस से अलग तरीके से निपटेंगे।
जोड़ा लेखक pkaeding, स्रोत
@DanielEarwicker: अप्रासंगिक, क्योंकि यह JSON नहीं है।
जोड़ा लेखक Lightness Races in Orbit, स्रोत
यदि JSON जावास्क्रिप्ट इंजन के लिए नहीं है, तो इसका नाम "जावास्क्रिप्ट ऑब्जेक्ट नोटेशन" क्यों है?
जोड़ा लेखक James Curran, स्रोत
यह कुछ ऐसा था जो मुझे कुछ दिन पहले वेब पर देखने के लिए जरूरी था। मुझे SO पर यहां कोई जवाब नहीं मिला, इसलिए साइट के मिशन का पालन करने में, मैंने सवाल उठाया और इसका उत्तर दिया ताकि अन्य इसे ढूंढ सकें। यह कुछ ऐसा है जो जेफ ने स्पष्ट रूप से कहा था कि वह यहां करना चाहता था।
जोड़ा लेखक Ben Combee, स्रोत
धन्यवाद! मैं खुद टैग को हटाना नहीं चाहता था।
जोड़ा लेखक Ben Combee, स्रोत
लेकिन एक और बात: ओपी मैन्युअल रूप से JSON क्यों लिख रहा है? यह एक स्पष्ट विरोधी पैटर्न है - किसी को हमेशा जेएसओएन उत्पन्न करने के लिए लाइब्रेरी का उपयोग करना चाहिए, या उस भाषा संरचना में कनवर्ट करना चाहिए। स्ट्रिंग concatenation का उपयोग सिर्फ परेशानी के लिए पूछ रहा है; न केवल अल्पविरामों के लिए, बल्कि एन्कोडिंग के लिए, बचने, गलत घोंसले के लिए। एक्सएमएल के लिए स्ट्रिंग मैनिपुलेशन या रेगेक्सप्स का उपयोग करना उतना ही बुरा है।
जोड़ा लेखक StaxMan, स्रोत
कुछ इतना बुनियादी बात यह है कि उत्तर आधिकारिक विशिष्टता को देखकर पाया जाता है, यह अनसुलझा समस्याओं के सहायक उत्तर प्रदान करने के बजाय अंक के लिए मछली पकड़ने की तरह लगता है। माफ करना दोस्त।
जोड़ा लेखक eyelidlessness, स्रोत
इसके लायक होने के लिए, मेरी शिकायत यह नहीं थी कि सवाल सरल है (मैंने खुशी से यहां कई सरल प्रश्नों का उत्तर दिया है), लेकिन यह गेमिंग प्रतिष्ठा बिंदुओं के उद्देश्य से एक प्रश्न होने के लिए (पहली नज़र में) दिखाई दिया। आप यह भी ध्यान दें कि मैंने स्वीकार किया कि कुछ चर्चा के बाद प्रश्न मान्य है।
जोड़ा लेखक eyelidlessness, स्रोत
मैंने अनुबंधित प्रश्न टैग को हटा दिया क्योंकि यह स्पष्ट है कि यह इस तथ्य के बावजूद यह ज्ञात नहीं है कि यह आधिकारिक विशिष्टता में स्पष्ट रूप से विस्तृत है।
जोड़ा लेखक eyelidlessness, स्रोत
क्योंकि जावास्क्रिप्ट ऑब्जेक्ट अक्षर ने प्रारूप को प्रेरित किया। क्या आपको नहीं लगता कि यह कह रहा है कि जेएस इंजनों में बस जेएसओएन क्षमताओं का निर्माण शुरू हो रहा है? simonwillison.net/2006/Dec/20/json लेकिन JSON के पास कई प्रतिबंध नहीं हैं जेएस द्वारा लगाया गया, उदाहरण के लिए। जेएस ऑब्जेक्ट अक्षर को उद्धृत कुंजी की आवश्यकता नहीं है।
जोड़ा लेखक eyelidlessness, स्रोत
इसके अलावा, जेएस इंजन इसका इलाज अलग-अलग तथ्य से उत्पन्न करते हैं कि जेएस जेएसओएन (वर्तमान में) जेएसओएन को नहीं समझता है और इसे केवल ऑब्जेक्ट/सरणी के रूप में व्यवहार करता है। अंतर ऑब्जेक्ट/सरणी अक्षरों के इंजन उपचार में एक अंतर है, जो कि नहीं JSON जैसा ही है।
जोड़ा लेखक eyelidlessness, स्रोत
जेएसओएन जावास्क्रिप्ट इंजन के लिए नहीं है, यह एक सार्वभौमिक डेटा इंटरचेंज प्रारूप है। प्रश्न के उत्तर में त्रुटि के लिए कोई जगह नहीं है, क्योंकि यह स्पष्ट रूप से निर्दिष्ट है।
जोड़ा लेखक eyelidlessness, स्रोत
अगर यह कोई सांत्वना है, तो मैंने डाउनवोट नहीं किया, मैंने अभी टैग जोड़ा क्योंकि मैंने सोचा कि यह उचित था।
जोड़ा लेखक eyelidlessness, स्रोत
सहमत हैं कि पोस्ट करने के लिए यह एक अच्छा सवाल है। मैं यहाँ सवाल पूछकर मिला।
जोड़ा लेखक fool4jesus, स्रोत

14 उत्तर

दुर्भाग्यवश JSON विनिर्देश किसी पीछे की अल्पविराम की अनुमति नहीं देता है। ऐसे कुछ ब्राउज़र हैं जो इसे अनुमति देंगे, लेकिन आम तौर पर आपको सभी ब्राउज़रों के बारे में चिंता करने की आवश्यकता होती है।

आम तौर पर मैं समस्या को चारों ओर बदलने की कोशिश करता हूं, और वास्तविक मूल्य से पहले कॉमा जोड़ता हूं, इसलिए आप इस तरह दिखने वाले कोड के साथ समाप्त होते हैं:

s.append("[");
for (i = 0; i < 5; ++i) {
  if (i) s.append(",");//add the comma only if this isn't the first entry
  s.appendF("\"%d\"", i);
}
s.append("]");

आपके लूप में कोड की अतिरिक्त एक पंक्ति शायद ही महंगी है ...

Another alternative I've used when output a structure to JSON from a dictionary of some form is to always append a comma after each entry (as you are doing above) and then add a dummy entry at the end that has not trailing comma (but that is just lazy ;->).

दुर्भाग्य से एक सरणी के साथ अच्छी तरह से काम नहीं करता है।

179
जोड़ा
यह वास्तव में एक शर्म की बात है कि ईसीएमए 5 ट्रेलिंग निर्दिष्ट करता है, लेकिन जेएसओएन नहीं करता है।
जोड़ा लेखक FlavorScape, स्रोत
अंत में एक डमी प्रविष्टि जोड़ने के बारे में महान युक्ति!
जोड़ा लेखक dcsan, स्रोत
हां, वह अतिरिक्त रेखा शायद ही महंगी है, लेकिन फिर भी एक उपद्रव है।
जोड़ा लेखक René Nyffenegger, स्रोत
यह दृष्टिकोण अनुक्रमित फॉर-लूप के लिए काम करता है। शैली के लूप में ... के बारे में कैसे? क्या कोई सुरुचिपूर्ण तरीका है?
जोड़ा लेखक sam, स्रोत
यदि आपको obfuscated कोड पसंद है, तो आप अतिरिक्त संलग्नक से बच सकते हैं: s.appendF (& ", \"% d \ "" [! I], i); । आप इसे "..." +! I में सरल बना सकते हैं, लेकिन संकलक स्ट्रिंग अंकगणितीय के बारे में चेतावनी दे सकता है।
जोड़ा लेखक Marcelo Cantos, स्रोत
अच्छा उत्तर। कृपया अपने उत्तर के "प्रमाण" (दस्तावेज़ों, चश्मे, आदि के लिए एक लिंक) प्रदान करें।
जोड़ा लेखक chharvey, स्रोत
खैर, अब मेरे पास JSON के रूप में एक वाक्यविन्यास पेड़ लिखने का कार्य है, जबकि यह एक स्टैक ऑटोमाटा द्वारा उत्पन्न होता है। मैं दुर्भाग्य से इस चाल का उपयोग नहीं कर सकता।
जोड़ा लेखक Calmarius, स्रोत
फ़ायरफ़ॉक्स को इस संबंध में आईई की तरह व्यवहार करने का कोई तरीका है, और एक पिछली कॉमा का सामना करने पर कम से कम चेतावनी उत्पन्न होती है या कम से कम चेतावनी होती है? मैं मुख्य रूप से फ़ायरफ़ॉक्स में विकसित करता हूं इसलिए जल्द से जल्द इस समस्या को अधिसूचित करना अच्छा लगेगा।
जोड़ा लेखक Michael Butler, स्रोत
प्रश्न का स्पष्ट उत्तर देने के लिए उत्तर अपडेट किया गया। मैं सहमत हूं, मेरे शुरुआती उत्तर ने स्पष्ट, "नहीं" छोड़ा।
जोड़ा लेखक brianb, स्रोत
गुणों से निपटने के दौरान कोड की अतिरिक्त एक पंक्ति जटिल हो सकती है। आप अपने बेवकूफ छोटे कॉमा से बचने के लिए अपने आप को if बस प्राप्त कर सकते हैं। विस्तारशीलता YMMV के बारे में, इसे उदाहरण के लिए देखें jsfiddle.net/oriadam/mywL9384 स्पष्टीकरण: आपका समाधान महान है , मैं बस चश्मे से नफरत करता हूं जो पिछली कॉमा को मना करता है।
जोड़ा लेखक oriadam, स्रोत
मैंने इस कारण के लिए अपने सभी जेएस कोड (उसी पंक्ति पर आइटम से पहले कॉमा) में इस स्वरूपण का उपयोग करना शुरू कर दिया है। अतिरिक्त पिछला कॉमा स्पॉट करने के लिए बहुत आसान बनाता है, और बहुत समय बचाता है। यह कष्टप्रद है, मेरी इच्छा है कि इसके लिए फ़ायरफ़ॉक्स के साथ एक त्रुटि फेंकने का विकल्प था (क्योंकि इससे डीबगिंग में मदद मिलेगी)।
जोड़ा लेखक rocketmonkeys, स्रोत

नहीं। JSON spec, जैसा कि http://json.org पर बनाए रखा गया है, पीछे की अल्पविरामों की अनुमति नहीं देता है। मैंने जो देखा है, उससे कुछ पार्सर्स चुपचाप उन्हें JSON स्ट्रिंग पढ़ने पर अनुमति दे सकते हैं, जबकि अन्य त्रुटियों को फेंक देंगे। अंतःक्रियाशीलता के लिए, आपको इसे शामिल नहीं करना चाहिए।

उपरोक्त कोड को पुनर्गठित किया जा सकता है, या तो सरणी टर्मिनेटर जोड़ते समय पिछली कॉमा को हटाने के लिए या वस्तुओं से पहले कॉमा जोड़ने के लिए, पहले के लिए इसे छोड़कर।

113
जोड़ा
और यह सवाल का सही जवाब है।
जोड़ा लेखक cdiggins, स्रोत
ईसीएमए 262 इसे धारा 11.1.5-ऑब्जेक्ट प्रारंभिक में परिभाषित करने के लिए लगता है। यह अच्छा है या नहीं, यह कल्पना में प्रतीत होता है।
जोड़ा लेखक Zero Distraction, स्रोत
@ ज़ीरोडिस्ट्रक्शन: ईसीएमए 262 ईसीएमएस्क्रिप्ट (जावास्क्रिप्ट के रूप में भी जाना जाता है) को परिभाषित करता है जो पर्ल या रूबी या सी ++ या जावा जैसी प्रोग्रामिंग भाषा है। जेएसओएन एक्सएमएल या सीएसवी या वाईएएमएल जैसे डेटा प्रारूप है। ये एक ही चीज नहीं हैं। JSON EXMA262 में मौजूद नहीं है लेकिन यह सिंटैक्स से प्राप्त होता है और इसे ऑब्जेक्ट शाब्दिक नोटेशन (जेएसओएन में चालू) कहा जाता है।
जोड़ा लेखक slebetman, स्रोत
मान्य ईसीएमएस्क्रिप्ट होने का मतलब यह नहीं है कि एक दस्तावेज़ वैध JSON है - JSON आमतौर पर RFC 4627 </ए>, और वह कल्पना पीछे की अल्पविराम की अनुमति नहीं देती है।
जोड़ा लेखक Tim Gilbert, स्रोत

सरल, सस्ता, पढ़ने में आसान, और हमेशा चश्मा के बावजूद काम करता है।

$delimiter = '';
for ....  {
    print $delimiter.$whatever
    $delimiter = ',';
}

$ Delim के लिए अनावश्यक असाइनमेंट भुगतान करने के लिए एक बहुत ही कम कीमत है। अगर कोई स्पष्ट लूप नहीं है लेकिन अलग कोड टुकड़े हैं तो यह भी काम करता है।

96
जोड़ा
यही वह है जो मैं आमतौर पर इस तरह की परिस्थितियों में करता हूं; मुझे लगता है कि अतिरिक्त असाइनमेंट वैकल्पिक दृष्टिकोण में मूल्य से पहले अल्पविराम को जोड़ने के लिए आवश्यक सशर्त को समाप्त करके ऑफ़सेट से अधिक है ( stackoverflow.com/ एक/201856/8946 )।
जोड़ा लेखक Lawrence Dol, स्रोत
साथ ही, विभाजक का दायरा रखना बेहतर है: के लिए (चलो ..., sep = ""; ...; sep = ",") {...
जोड़ा लेखक Lawrence Dol, स्रोत
मुझे इस समाधान को पसंद नहीं है, क्योंकि मेरे दायरे को प्रदूषित करने वाला एक और चर है। एक <�कोड> यदि को समझना आसान है। लेकिन साझा करने के लिए धन्यवाद।
जोड़ा लेखक Ich, स्रोत

जावास्क्रिप्ट में पिछली कॉमा की अनुमति है, लेकिन आईई में काम नहीं करते हैं। डगलस क्रॉकफोर्ड के वर्जनलेस जेएसओएन स्पेक ने उन्हें अनुमति नहीं दी, और क्योंकि यह संस्करणहीन था क्योंकि इसे बदलने की जरूरत नहीं थी। ES5 JSON spec ने उन्हें एक एक्सटेंशन के रूप में अनुमति दी, लेकिन क्रॉकफ़ोर्ड के आरएफसी 4627 ने नहीं किया, और ES5 वापस लौटा उन्हें अस्वीकार करने के लिए। फ़ायरफ़ॉक्स का पालन किया गया। इंटरनेट एक्सप्लोरर है कि हम अच्छी चीजें नहीं कर सकते हैं।

15
जोड़ा
मैंने अभी आईई 11 में कोई समस्या नहीं होने की कोशिश की। आईई के कौन से संस्करणों में आपने परीक्षण किया है, जहां आपने उन्हें समस्याएं पैदा करने के लिए पाया है?
जोड़ा लेखक iconoclast, स्रोत
ऐसा लगता है कि क्रॉकफोर्ड क्यों है कि हमारे पास अच्छी चीजें नहीं हो सकती हैं। जेएसओएन में और टिप्पणियां
जोड़ा लेखक Hejazzman, स्रोत
जोड़ा लेखक Tobu, स्रोत

PHP कोडर implode() को देखना चाहते हैं। यह एक सरणी एक स्ट्रिंग का उपयोग कर इसे जोड़ता है।

दस्तावेज़ से ...

$array = array('lastname', 'email', 'phone');
echo implode(",", $array);//lastname,email,phone
11
जोड़ा
इसी तरह, जावास्क्रिप्ट में शामिल हों() है। अधिकांश भाषाओं में एक समान विधि होती है, या इसी तरह के को आसानी से कोड किया जा सकता है।
जोड़ा लेखक Dan Burton, स्रोत
PHP में json_encode है, जो सिर्फ कॉमा नहीं, JSON बनाने के सभी विवरणों को संभालता है।
जोड़ा लेखक Brilliand, स्रोत
जावा को छोड़कर अधिकांश भाषाएं।
जोड़ा लेखक Robert, स्रोत

As it's been already said, JSON spec (based on ECMAScript 3) doesn't allow trailing comma. ES >= 5 allows it, so you can actually use that notation in pure JS. It's been argued about, and some parsers did support it (http://bolinfest.com/essays/json.html, http://whereswalden.com/2010/09/08/spidermonkey-json-change-trailing-commas-no-longer-accepted/), but it's the spec fact (as shown on http://json.org/) that it shouldn't work in JSON. That thing said...

... मैं सोच रहा हूं कि क्यों कोई भी इंगित नहीं करता कि आप वास्तव में 0 वें पुनरावृत्ति पर लूप को विभाजित कर सकते हैं और तुलना कोड गंध से छुटकारा पाने के लिए अग्रणी अल्पविराम का उपयोग कर सकते हैं और किसी भी वास्तविक प्रदर्शन लूप में ओवरहेड, जिसके परिणामस्वरूप एक कोड जो वास्तव में छोटे, सरल और तेज (लूप में कोई शाखा/सशर्त नहीं होने के कारण) प्रस्तावित अन्य समाधानों की तुलना में होता है।

जैसे (ओपी के प्रस्तावित कोड के समान सी-स्टाइल छद्म कोड में):

s.append("[");
// MAX == 5 here. if it's constant, you can inline it below and get rid of the comparison
if ( MAX > 0 ) {
    s.appendF("\"%d\"", 0);//0-th iteration
    for( int i = 1; i < MAX; ++i ) {
        s.appendF(",\"%d\"", i);//i-th iteration
    }
}
s.append("]");
8
जोड़ा

Interestingly, both C & C++ (and I think C#, but I'm not sure) specifically allow the trailing comma -- for exactly the reason given: It make programmaticly generating lists much easier. Not sure why JavaScript didn't follow their lead.

6
जोड़ा
PHP भी इसे अनुमति देता है। मुझे लगता है कि यह PHP की एक विशेषता है जिसे मैं पसंद करता हूं। , पी
जोड़ा लेखक iconoclast, स्रोत
पिछला कॉमा फ़ायरफ़ॉक्स में काम करता है, लेकिन आईई में नहीं।
जोड़ा लेखक kzh, स्रोत
ईसीएमए ने स्पष्ट रूप से निर्दिष्ट किया है कि आगामी spec में पिछली कॉमा की अनुमति है: ejohn.org/ब्लॉग/बग-फ़िक्स-इन-जावास्क्रिप्ट-2 फिर भी यह स्पष्ट करने का एक और कारण है कि जेएसओएन! = जेएस ऑब्जेक्ट।
जोड़ा लेखक eyelidlessness, स्रोत

JSON5 का प्रयोग करें। JSON का उपयोग न करें।

  • ऑब्जेक्ट्स और सरणी पिछली कॉमा
  • हो सकती है
  • यदि वे वैध पहचानकर्ता हैं
  • ऑब्जेक्ट कुंजियां अनजान हो सकती हैं
  • स्ट्रिंग्स को एकल-उद्धृत किया जा सकता है
  • स्ट्रिंग्स को कई पंक्तियों में विभाजित किया जा सकता है
  • संख्या हेक्साडेसिमल (आधार 16) हो सकती है
  • संख्याएं (अग्रणी या पीछे) दशमलव बिंदु से शुरू या समाप्त हो सकती हैं।
  • संख्याओं में अनंतता और इंफिनिटी शामिल हो सकती है।
  • संख्याएं एक स्पष्ट प्लस (+) चिह्न से शुरू हो सकती हैं।
  • दोनों इनलाइन (सिंगल-लाइन) और ब्लॉक (बहु-रेखा) टिप्पणियों की अनुमति है।

http://json5.org/

https://github.com/aseemk/json5

5
जोड़ा
इसके अलावा, mutliline तार भयानक हैं। मैं ES6 multilines का सपना देखता हूं।
जोड़ा लेखक Marco Sulla, स्रोत
अच्छा लग रहा है, लेकिन नए डेटा प्रकारों को जोड़ना एक मिस्ड अवसर की तरह नहीं लगता है ... निश्चित रूप से ईसीएमएस्क्रिप्ट 5 के सख्त सबसेट बने रहने की इच्छा है, लेकिन फिर भी ...
जोड़ा लेखक iconoclast, स्रोत
नहीं, यह बहुत ही सलाह है। सभी मौजूदा JSON पुस्तकालयों में, बहुत कम समर्थन ऐसे एक्सटेंशन; और यह सब बहुत संदिग्ध "सुधार" के लिए। कृपया इस तरह के नए फर्जी एक्सटेंशन द्वारा इंटर-ऑपरेटिबिलिटी के और क्षरण का कारण न बनें।
जोड़ा लेखक StaxMan, स्रोत
मेरा मानना ​​है कि अल्पविराम को ठीक करने पर अपना जीवन व्यतीत करना अधिक भयानक है।
जोड़ा लेखक user619271, स्रोत

मैं वर्तमान गिनती रखता हूं और इसकी कुल गणना की तुलना करता हूं। यदि वर्तमान गणना कुल गणना से कम है, तो मैं अल्पविराम प्रदर्शित करता हूं।

यदि आपके पास JSON पीढ़ी को निष्पादित करने से पहले कुल गणना नहीं है तो काम नहीं कर सकता है।

फिर फिर, यदि आप PHP 5.2.0 या बेहतर का उपयोग कर रहे हैं, तो आप बस जेएसओएन एपीआई का उपयोग करके अपनी प्रतिक्रिया को प्रारूपित कर सकते हैं।

1
जोड़ा

मेरे पिछले अनुभव से, मैंने पाया कि विभिन्न ब्राउज़र जेएसओएन में अलग-अलग कॉमा से निपटते हैं।

फ़ायरफ़ॉक्स और क्रोम दोनों इसे ठीक से संभालते हैं। लेकिन आईई (सभी संस्करण) तोड़ने लगते हैं। मेरा मतलब है कि वास्तव में ब्रेक और शेष स्क्रिप्ट को पढ़ना बंद करो।

इसे ध्यान में रखते हुए, और यह भी तथ्य कि संगत कोड लिखना हमेशा अच्छा होता है, मैं यह सुनिश्चित करने के अतिरिक्त प्रयास करने का सुझाव देता हूं कि कोई पिछला कॉमा नहीं है।

:)

1
जोड़ा

कक्षा JSONArray विनिर्देश के अनुसार:

  • एक अतिरिक्त, (अल्पविराम) समापन ब्रैकेट से ठीक पहले दिखाई दे सकता है।
  • जब शून्य, (अल्पविराम) elision है, तो शून्य मान डाला जाएगा।

इसलिए, जैसा कि मैं इसे समझता हूं, इसे लिखने की अनुमति दी जानी चाहिए:

[0,1,2,3,4,5,]

लेकिन ऐसा हो सकता है कि कुछ पार्सर्स 7 की बजाय आइटम गिनती (जैसे आईई 8 डैनियल ईरविकियर के रूप में इंगित) के रूप में वापस लौटाएंगे।


संपादित:

मुझे यह JSON Validator मिला है जो एक JSON स्ट्रिंग को आरएफसी 4627 (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन के लिए एप्लिकेशन/जेसन मीडिया प्रकार) और जावास्क्रिप्ट भाषा विनिर्देश के खिलाफ। असल में यहां एक पिछला कॉमा वाला एक सरणी जावास्क्रिप्ट के लिए मान्य है, न कि आरएफसी 4627 विनिर्देश के लिए।

हालांकि, आरएफसी 4627 विनिर्देश में कहा गया है कि:

2.3। सरणी

     

शून्य के चारों ओर स्क्वायर ब्रैकेट के रूप में एक सरणी संरचना का प्रतिनिधित्व किया जाता है   या अधिक मूल्य (या तत्व)। तत्व अल्पविराम से अलग होते हैं।

 array = start-array [value * (मान-विभाजक मान)] एंड-सरणी
 

मेरे लिए यह एक व्याख्या समस्या है। यदि आप लिखते हैं कि तत्व अल्पविराम से अलग होते हैं (विशेष मामलों के बारे में कुछ बताए बिना, अंतिम तत्व की तरह), इसे दोनों तरीकों से समझा जा सकता है।

P.S. RFC 4627 isn't a standard (as explicitly stated), and is already obsolited by RFC 7159 (which is a proposed standard) RFC 7159

1
जोड़ा
दिया गया व्याकरण नियम उतना सटीक है जितना आप प्राप्त कर सकते हैं। value-separator के बिना value के बगल में कोई रास्ता नहीं है। पाठ भी बहुत विशिष्ट है। "मानों का पृथक्करण" केवल तभी लागू हो सकता है जब कई मान हैं। तो यदि आपके पास एक-दूसरे के बगल में दो मान हैं, तो वे अल्पविराम का उपयोग करके अलग हो जाते हैं। यदि आपके पास एक मान है (या यदि आप केवल अंत में मूल्य देखें), तो कोई अलगाव नहीं है, इसलिए कोई अल्पविराम नहीं है।
जोड़ा लेखक Steffen Heil, स्रोत

मैं आम तौर पर सरणी पर लूप करता हूं और स्ट्रिंग में प्रत्येक प्रविष्टि के बाद एक अल्पविराम संलग्न करता हूं। लूप के बाद मैं फिर से अंतिम कॉमा हटा देता हूं।

हो सकता है कि सबसे अच्छा तरीका न हो, लेकिन हर बार जांचने से कम महंगा है अगर यह मुझे लगता है कि लूप में आखिरी वस्तु है।

0
जोड़ा

आराम से जेएसओएन के साथ, आप पीछे की ओर अल्पविराम कर सकते हैं, या बस अल्पविराम छोड़ दें । वे वैकल्पिक हैं।

JSON- जैसे दस्तावेज़ को पार्स करने के लिए सभी अल्पविरामों को उपस्थित होने की आवश्यकता नहीं है।

आराम से JSON spec पर एक नज़र डालें और आप देखेंगे कि मूल JSON spec कैसे 'शोर' है। रास्ता बहुत सारे अल्पविराम और उद्धरण ...

http://www.relaxedjson.org

आप इस ऑनलाइन आरजेएसओएन पार्सर का उपयोग करके अपना उदाहरण भी आज़मा सकते हैं और इसे सही ढंग से पार्स किया जा सकता है।

http://www.relaxedjson.org/docs/converter.html?source=%5B0%2C1%2C2%2C3%2C4%2C5%2C%5D

0
जोड़ा

इसकी अनुशंसा नहीं की जाती है, लेकिन आप इसे अभी भी पार्स करने के लिए ऐसा कुछ कर सकते हैं।

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

jsonStr = '[0,1,2,3,4,5,]';
let data;
eval('data = ' + jsonStr);
console.log(data)
</div> </div>
0
जोड़ा