JSON Toolkit

ट्रेलिंग कॉमा JSON क्यों तोड़ता है

मुख्य बात: ट्रेलिंग कॉमा JavaScript ऑब्जेक्ट लिटरल में वैध हैं और JSON में घातक। यहाँ सटीक एरर, उसे पैदा करने वाला RFC 8259 व्याकरण, और तीन ऐसे समाधान हैं जो वास्तव में टिकते हैं।

शुरुआती~3 मिनट पढ़ें2026-10-30 को प्रकाशित2026-10-30 को अपडेट किया गया
JSON में ट्रेलिंग कॉमा क्यों विफल होते हैं और उन्हें कैसे ठीक करें

मुख्य बात: JSON हर जगह ट्रेलिंग कॉमा मना करता है — जब पार्सर विफल हो, तो फ़ॉर्मैटर से अंतिम कॉमा हटा दें; JSON5 या JSONC केवल लोकल उदार पार्सिंग के लिए उपयोग करें, और दूसरे सिस्टम को हमेशा मानक JSON ही भेजें।

क्योंकि व्याकरण ऐसा कहता है।

{
  "name": "demo",
  "size": 12,
}

JSON.parse Unexpected token } in JSON at position 34 throw करता है। Node इसे अलग शब्दों में कहता है, लेकिन हर इंजन एक ही जगह इशारा करता है: } से पहले वाला कॉमा।

पार्सर वास्तव में किस बात की शिकायत कर रहा है

RFC 8259 में object production है:

object = begin-object [ member *( value-separator member ) ] end-object

वर्गाकार कोष्ठक का अर्थ वैकल्पिक है, तारांकन का अर्थ शून्य या अधिक। सरल शब्दों में: कॉमा सदस्यों को अलग करते हैं, और अंतिम सदस्य के तुरंत बाद } आता है।

इसलिए कॉमा के बाद पार्सर एक और सदस्य नाम के लिए तैयार होता है। वह } पढ़ता है और विफल हो जाता है। Arrays भी ठीक वैसा ही व्यवहार करते हैं — [1, 2, 3,] ] पर विफल होता है।

यह आदत कहाँ से आती है

JavaScript ऑब्जेक्ट लिटरल ES5 से ट्रेलिंग कॉमा की अनुमति देते आए हैं, और Python lists व Go composite literals भी देते हैं। एडिटर उन्हें अपने आप जोड़ देते हैं। फिर कोई व्यक्ति .js फ़ाइल से ऑब्जेक्ट लिटरल कॉपी करके .json फ़ाइल में डालता है और फ़ाइल पार्स होना बंद कर देती है।

दूसरा सामान्य स्रोत हाथ से बनाई गई JSON है: ऐसा लूप जो i <= length तक चलता है, अंतिम तत्व के बाद कॉमा छोड़ देता है।

तीन समाधान

कॉमा हटाएँ। मैन्युअल संपादन के लिए ठीक है। JSON formatter में पेस्ट करें और एरर लाइन व कॉलम के साथ बताई जाती है, इसलिए आप ठीक-ठीक देख सकते हैं कि कौन-सा हटाना है।

JSON5 के रूप में पार्स करें। सुपरसेट ट्रेलिंग कॉमा स्वीकार करते हैं, जो लोकल कॉन्फ़िग के लिए ठीक है। जो कुछ आप दूसरे सिस्टम को भेजते हैं उसके लिए यह ठीक नहीं है — प्राप्तकर्ता अब भी इसे अस्वीकार करेगा।

स्ट्रिंग जोड़ना बंद करें। JSON.stringify, json.dumps, Jackson उपयोग करें। सीरियलाइज़र विभाजकों को सही ढंग से संभालता है और साथ ही escaping भी हल करता है।

त्वरित ऑडिट सूची

कहाँ सामान्य कारण
लूप संयोजन i <= length एक अतिरिक्त कॉमा छोड़ देता है
कॉपी-पेस्ट JS फ़ाइल से उठाया गया ऑब्जेक्ट लिटरल
Templates हार्डकोडेड कॉमा और साथ में एक और जोड़ने वाला लूप
मैन्युअल संपादन अंतिम फ़ील्ड हटाया, उसका कॉमा पीछे छूट गया

FAQ

JavaScript में ट्रेलिंग कॉमा वैध हैं लेकिन JSON में क्यों नहीं?

JavaScript ऑब्जेक्ट लिटरल ES5 से इनकी अनुमति देते आए हैं, और Python lists व Go composite literals भी, इसीलिए यह आदत लोगों के साथ JSON तक चली आती है। RFC 8259 कॉमा को केवल सदस्यों के बीच अनुमति देता है: अंतिम सदस्य के तुरंत बाद } या ] आता है। .js फ़ाइल से ऑब्जेक्ट लिटरल कॉपी करके .json फ़ाइल में डालना ही सामान्य स्रोत है।

ट्रेलिंग कॉमा स्वीकारने के लिए JSON5 के रूप में पार्स करूँ?

केवल लोकल कॉन्फ़िग के लिए। सुपरसेट ट्रेलिंग कॉमा स्वीकार करते हैं, लेकिन दूसरे सिस्टम को भेजी गई कोई भी चीज़ सख्त JSON के रूप में पार्स होती है और अब भी विफल होगी। प्राप्तकर्ता के उदार होने पर निर्भर रहने के बजाय आउटपुट सीमा पर मानक JSON जनरेट करें।

ट्रेलिंग कॉमा एरर के बाद पहले कहाँ देखें?

एरर संदेश में दी गई स्थिति से शुरू करें: यह आमतौर पर } या ] से पहले वाले कॉमा पर इशारा करती है। फिर तीन सामान्य स्रोत जाँचें: i <= length से लिखा गया लूप, JS फ़ाइल से पेस्ट किया गया ऑब्जेक्ट लिटरल, और ऐसा template जो हार्डकोडेड कॉमा के साथ लूप भी जोड़ता है। फ़ॉर्मैटर में पेस्ट करने पर सटीक लाइन और कॉलम बताई जाती है।

आगे पढ़ें