JSON Schema एक और JSON दस्तावेज़ का इस्तेमाल करके यह बताने का तरीका है कि किसी JSON दस्तावेज़ की संरचना कैसी होनी चाहिए। कोड में शर्तों से मैन्युअल रूप से डेटा वैलिडेट करने के बजाय, आप अपेक्षित टाइप, अनिवार्य फ़ील्ड और वैल्यू की सीमाओं को घोषणात्मक रूप से बता सकते हैं, फिर डेटा को स्वचालित रूप से जाँच सकते हैं।
draft-07 के मुख्य कीवर्ड
type— अपेक्षित वैल्यू टाइप (object, string, number, array आदि)।required— ऑब्जेक्ट के उन फ़ील्ड की सूची जो अनिवार्य रूप से मौजूद होने चाहिए।properties— ऑब्जेक्ट के हर फ़ील्ड के लिए अलग से स्कीमा का विवरण।enum— किसी वैल्यू को विकल्पों के एक खास सेट तक सीमित करना।pattern— किसी स्ट्रिंग को रेगुलर एक्सप्रेशन से जाँचना, जैसे PAN नंबर के फ़ॉर्मेट के लिए।
उदाहरण: भारतीय PAN नंबर के लिए pattern
भारतीय PAN कार्ड नंबर का एक तय ढाँचा होता है: 5 अक्षर, फिर 4 अंक, और आख़िर में 1 अक्षर — जैसे ABCDE1234F। KYC या पेमेंट API के लिए स्कीमा में इसे इस तरह लिखा जा सकता है: "pan": {"type": "string", "pattern": "^[A-Z]{5}\\d{4}[A-Z]$"}। यह यह नहीं जाँचता कि चौथा अक्षर टैक्सपेयर की श्रेणी (व्यक्ति, कंपनी आदि) से मेल खाता है या नहीं — इसके लिए अलग बिज़नेस लॉजिक चाहिए — लेकिन यह गलत लंबाई, छोटे अक्षरों, या अंकों की गलत जगह जैसी सामान्य गलतियों को तुरंत पकड़ लेता है।
यह सिंटैक्स वैलिडेशन से कैसे अलग है
सामान्य JSON वैलिडेशन केवल यह जाँचता है कि टेक्स्ट सिंटैक्स रूप से सही है — सही ब्रैकेट, कोट्स, कॉमा। JSON Schema इससे कहीं ज़्यादा जाँचता है: क्या किसी ऑब्जेक्ट में अनिवार्य फ़ील्ड email है, क्या age की वैल्यू स्ट्रिंग नहीं बल्कि नंबर है, क्या status अनुमत वैल्यू की सूची में है।
यह क्यों ज़रूरी है
- यह जाँचना कि किसी थर्ड-पार्टी API का रिस्पॉन्स डॉक्यूमेंट किए गए कॉन्ट्रैक्ट से मेल खाता है।
- गलती जल्दी पकड़ने के लिए डिप्लॉयमेंट से पहले कॉन्फ़िग फ़ाइलों को वैलिडेट करना।
- अपेक्षित डेटा संरचना को ऐसे फ़ॉर्मेट में डॉक्यूमेंट करना जिसे तुरंत स्वचालित रूप से जाँचा जा सके।
additionalProperties: क्या अतिरिक्त फ़ील्ड जोड़े जा सकते हैं
डिफ़ॉल्ट रूप से JSON Schema किसी ऑब्जेक्ट में properties में बताई गई फ़ील्ड से अलग भी कोई भी फ़ील्ड होने देता है — required और properties सिर्फ़ न्यूनतम तय करते हैं, संपूर्ण सूची नहीं। अगर अनजान फ़ील्ड को रोकना है, तो "additionalProperties": false स्पष्ट रूप से जोड़ना ज़रूरी है — इस फ़्लैग के बिना स्कीमा "खुली" रहती है।