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