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 नियम उसे अनिवार्य बनाता है।

सत्यापन बताता है कि ऑब्जेक्ट स्कीमा के अनुरूप है या नहीं; वह अतिरिक्त फ़ील्ड हटाता नहीं है। उन्हें हटाने के लिए अलग रूपांतरण या वैलिडेटर का विशिष्ट विकल्प चाहिए।

दोनों ऑब्जेक्ट JSON Schema Validator में जाँचें →

स्कीमा से अतिरिक्त प्रॉपर्टी सत्यापित करें

{ "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 को अतिरिक्त प्रॉपर्टी मानकर अस्वीकार करता है।

नमूने से शुरू करें

ऑब्जेक्ट की संरचना बनाएँ

ज्ञात प्रॉपर्टी बनाएँ, फिर अपने कॉन्ट्रैक्ट की आवश्यक अतिरिक्त-फ़ील्ड नीति चुनें।

JSON to JSON Schema Generator खोलें →