JSON बनाम JSON5 बनाम JSONC
मुख्य बात: कड़ाई से सुपरसेट क्रम में: JSONC कमेंट जोड़ता है; JSON5 सिंगल कोट्स, बिना कोट की कुंजियाँ, ट्रेलिंग कॉमा और hex संख्याएँ जोड़ता है। गलत चुनाव आपके एडिटर नहीं, API को तोड़ता है।

मुख्य बात: जब भी डेटा सिस्टम सीमा पार करे तो मानक JSON उपयोग करें, और JSONC केवल उस लोकल कॉन्फ़िग के लिए उपयोग करें जिसे इंसान संपादित करते हैं; जब सिंगल कोट्स, ट्रेलिंग कॉमा या बिना कोट की कुंजियाँ चाहिए तो JSON5 की ओर जाएँ, लेकिन पहले पुष्टि करें कि loader इसे समर्थित करता है।
एक पंक्ति में: JSONC = JSON + कमेंट; JSON5 = JSON + JavaScript आदतें।
सुविधा मैट्रिक्स
| सुविधा | JSON | JSONC | JSON5 |
|---|---|---|---|
| डबल-कोट स्ट्रिंग | ✅ | ✅ | ✅ |
| सिंगल-कोट स्ट्रिंग | ❌ | ❌ | ✅ |
| बिना कोट की कुंजियाँ | ❌ | ❌ | ✅ |
// लाइन कमेंट |
❌ | ✅ | ✅ |
/* */ ब्लॉक कमेंट |
❌ | ✅ | ✅ |
| ट्रेलिंग कॉमा | ❌ | ❌ | ✅ |
Hex संख्याएँ 0xFF |
❌ | ❌ | ✅ |
Infinity / NaN |
❌ | ❌ | ✅ |
| Multi-line स्ट्रिंग | ❌ | ❌ | ✅ |
| मानक पार्सर द्वारा पठनीय | ✅ | ❌ | ❌ |
ध्यान दें कि JSONC केवल कमेंट हल करता है। बहुत लोग मानते हैं कि "कमेंट की अनुमति देने वाला JSON" ट्रेलिंग कॉमा की भी अनुमति देता है; tsconfig.json एक पर अब भी विफल होता है।
हर एक किसके लिए है
JSON — इंटरचेंज। APIs, queues, डेटाबेस JSON columns, लॉग। मशीन-से-मशीन कुछ भी।
JSONC — एडिटर कॉन्फ़िगरेशन। VS Code इन फ़ाइलों को खुद पार्स करता है, इसलिए JSON.parse इन्हें कभी नहीं देखता। कोई RFC नहीं है; यह Microsoft के नेतृत्व वाली de facto परंपरा है।
JSON5 — इंसानों के लिए उदार सुपरसेट। लक्ष्य था "ऐसा कॉन्फ़िग जो JavaScript ऑब्जेक्ट लिटरल जैसा दिखे"। .json5 फ़ाइलों के लिए सबसे उपयुक्त जिन्हें build tools लोड करते हैं; सबसे व्यापक सिंटैक्स और सबसे संकीर्ण टूलिंग समर्थन।
चुनाव
| स्थिति | चुनें |
|---|---|
| Request या response bodies | JSON, कोई विकल्प नहीं |
| MySQL / PostgreSQL में JSON columns | JSON, उनके फ़ंक्शन कुछ और स्वीकार नहीं करते |
| व्याख्या चाहने वाला प्रोजेक्ट कॉन्फ़िग | समर्थित हो तो JSONC, अन्यथा YAML |
| आपको JS-शैली की छूट चाहिए | JSON5, loader का समर्थन पुष्टि करने के बाद |
| गैर-इंजीनियर इसे संपादित करेंगे | YAML, इंडेंटेशन braces से बेहतर है |
एक आसान जाल
JSONC फ़ाइल को सख्त JSON के रूप में पार्स करने से ऐसा एरर आता है जो कमेंट पर इशारा करता है:
SyntaxError: Unexpected token / in JSON at position 42
कमेंट हटाने से पहले जाँचें कि फ़ाइल JSONC होने के लिए है या नहीं। उसे हटा दें और दो पंक्तियों बाद ट्रेलिंग कॉमा पर अब भी अटक सकते हैं।
FAQ
JSONC और JSON5 में कैसे चुनूँ?
जब कमेंट ही एकमात्र आवश्यकता हो तो JSONC उपयोग करें: यह JSON के ऊपर // और /* */ जोड़ता है, और VS Code का settings.json व tsconfig.json इसे उपयोग करते हैं। जब आपको सिंगल कोट्स, बिना कोट की कुंजियाँ, ट्रेलिंग कॉमा, hex संख्याएँ या multi-line स्ट्रिंग भी चाहिए तो JSON5 उपयोग करें। दोनों loader पर निर्भर हैं, इसलिए पुष्टि करें कि फ़ाइल पढ़ने वाला टूल इसे समर्थित करता है।
JSONC फ़ाइल को मानक JSON के रूप में क्यों नहीं पढ़ा जा सकता?
JSONC एक de facto परंपरा है, अलग RFC नहीं, इसलिए मानक पार्सर कमेंट अस्वीकार करते हैं। ऐसी फ़ाइल पर JSON.parse Unexpected token / throw करता है, जो डेटा के बजाय कमेंट पर इशारा करता है। केवल एडिटर या समर्पित पार्सर द्वारा पढ़ा जाने वाला कॉन्फ़िग JSONC के रूप में लिखा जाना चाहिए।
क्या API को JSON5 फ़ाइल भेजनी चाहिए?
नहीं। APIs, डेटाबेस JSON columns और queues सख्त JSON पार्स करते हैं, इसलिए JSON5 के सिंगल कोट्स, बिना कोट की कुंजियाँ और ट्रेलिंग कॉमा अस्वीकार हो जाते हैं। JSON5 इंसानों द्वारा संपादित लोकल कॉन्फ़िग के लिए है; सिस्टम सीमा पार करने से पहले इसे मानक JSON में बदलें।