JSON और स्कीमा
JSON Schema additionalProperties को समझें
ऑब्जेक्ट स्कीमा डिफ़ॉल्ट रूप से अतिरिक्त प्रॉपर्टी स्वीकार करते हैं। बेमेल कुंजियाँ अस्वीकार करने के लिए additionalProperties को false सेट करें, या उनके मान जाँचने वाला स्कीमा दें।
प्रकाशित · अपडेट किया गया
डिफ़ॉल्ट: अतिरिक्त प्रॉपर्टी स्वीकार्य हैं
additionalProperties छोड़ने पर बेमेल फ़ील्ड स्वीकार किए जाते हैं; additionalProperties: true भी यही करता है। debug या metadata फ़ील्ड केवल properties में न होने के कारण विफल नहीं होता। नामित फ़ील्ड के नियम फिर भी लागू होते हैं।
{ "type": "object", "properties": { "name": { "type": "string" } } }additionalProperties: false से अज्ञात फ़ील्ड अस्वीकार करें
{
"type": "object",
"properties": { "name": { "type": "string" } },
"required": ["name"],
"additionalProperties": false
}मान्य: केवल घोषित फ़ील्ड
{ "name": "Mira" }अमान्य: एक अतिरिक्त फ़ील्ड
{ "name": "Mira", "debug": true }अतिरिक्त debug कुंजी इस स्कीमा में विफल होती है। name हटाने पर भी जाँच विफल होगी, क्योंकि अलग required नियम उसे अनिवार्य बनाता है।
सत्यापन बताता है कि ऑब्जेक्ट स्कीमा के अनुरूप है या नहीं; वह अतिरिक्त फ़ील्ड हटाता नहीं है। उन्हें हटाने के लिए अलग रूपांतरण या वैलिडेटर का विशिष्ट विकल्प चाहिए।
स्कीमा से अतिरिक्त प्रॉपर्टी सत्यापित करें
{ "type": "object", "additionalProperties": { "type": "string" } }यहाँ { "label": "ready" } मान्य है, जबकि { "count": 3 } अमान्य है: हर अतिरिक्त मान स्ट्रिंग होना चाहिए। स्वीकार्य मानों की निश्चित सूची के लिए enum उपयोग करें।
properties बनाम patternProperties बनाम additionalProperties
| कीवर्ड | किससे मेल खाता है |
|---|---|
| properties | सटीक प्रॉपर्टी नाम |
| patternProperties | रेगुलर एक्सप्रेशन से मेल खाने वाले नाम |
| additionalProperties | पहले दो से मेल न खाने वाले नाम |
संयोजित स्कीमा और unevaluatedProperties
additionalProperties अपने स्कीमा स्थान के भीतर जाँचा जाता है, जो allOf उपयोग करने वालों को चकित कर सकता है। नए ड्राफ़्ट में unevaluatedProperties बाद की सीमा व्यक्त कर सकता है, लेकिन उसका उपयोग केवल समर्थित वैलिडेटर और घोषित ड्राफ़्ट के साथ करें।
संयोजित स्कीमा बंद करने से पहले oneOf, anyOf और allOf देखें। JSON Schema ऑब्जेक्ट संदर्भ समझाता है कि पड़ोसी शाखाओं में घोषित प्रॉपर्टी भी क्यों अस्वीकार हो सकती हैं।
आम गलतियाँ
- मान लेना कि ऑब्जेक्ट डिफ़ॉल्ट रूप से बंद हैं।
- ज्ञात फ़ील्ड का होना आवश्यक हो तब required भूलना।
- एक allOf शाखा में additionalProperties: false रखकर यह अपेक्षा करना कि वह पड़ोसी प्रॉपर्टी देखेगा।
- अनुकूलता की समीक्षा किए बिना API को बंद स्कीमा में बदलना।
उदाहरण आज़माएँ
अतिरिक्त ऑब्जेक्ट फ़ील्ड देखें
बंद कॉन्ट्रैक्ट चुनने से पहले debug फ़ील्ड वाले नमूने से आधार बनाएँ।
{"name":"Alice","age":30,"debug":true}अपेक्षित परिणाम: बने स्कीमा में सभी देखे फ़ील्ड हैं और नीतिगत फैसले स्पष्ट रहते हैं।
उदाहरण आज़माएँ
अज्ञात debug फ़ील्ड अस्वीकार करें
बंद ऑब्जेक्ट स्कीमा उपयोग करें और अतिरिक्त प्रॉपर्टी की त्रुटि देखें।
additionalProperties: false
data: {name, age, debug}अपेक्षित परिणाम: सत्यापन debug को अतिरिक्त प्रॉपर्टी मानकर अस्वीकार करता है।
नमूने से शुरू करें
ऑब्जेक्ट की संरचना बनाएँ
ज्ञात प्रॉपर्टी बनाएँ, फिर अपने कॉन्ट्रैक्ट की आवश्यक अतिरिक्त-फ़ील्ड नीति चुनें।