केवल उन संपत्तियों को अनुमति दें जो JSON स्कीमा में घोषित किए गए हैं


83

मैं json-स्कीमा का उपयोग कर रहा हूं और केवल उन संपत्तियों को अनुमति देना चाहता हूं जो इस फाइल में घोषित किए गए हैं। उदाहरण के लिए, यदि कोई उपयोगकर्ता अपने "ऑब्जेक्ट" को अपने json ऑब्जेक्ट में पास करता है, तो वह इस स्कीमा को विफल कर देगा क्योंकि "नाम" को यहां एक संपत्ति के रूप में सूचीबद्ध नहीं किया गया है।

क्या "आवश्यक" के समान कुछ फ़ंक्शन है जो केवल सूचीबद्ध गुणों को पारित करने की अनुमति देगा?

{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Accounting Resource - Add Item",
"type": "object",
"properties": {
    "itemNumber": {
        "type":"string",
        "minimum": 3
    },
    "title": {
        "type":"string",
        "minimum": 5
    },
    "description": {
        "type":"string",
        "minimum": 5
    }
},
"required": [
    "itemNumber",
    "title",
    "description"
]
}

2
यहां तक ​​कि अगर कोई रास्ता है, तो ऐसा लगता है कि भविष्य की शूटिंग पैर में फैली हुई है।
क्रिस पिटमैन

9
भविष्य में कभी भी मैं उन योजनाओं को इस स्कीम में जोड़ दूंगा।
ipengineer

1
@ipengineer - जब तक आप काम कर रहे व्यक्ति हैं तब तक वह (-ish) काम करता है । इसका अर्थ यह भी है कि आप एक संसाधन को बदलते हैं, जिसे कुछ लोग स्थैतिक मान सकते हैं।
मेघावी

11
इसके बारे में कोई "-ish" नहीं है। यदि आपके एपीआई भविष्य में नए प्रॉप्स को स्वीकार करना शुरू कर देता है, तो आपके स्कीमा में नए गुणों को जोड़ना मुश्किल नहीं है, चाहे आपकी टीम का आकार कोई भी हो। यदि ऐसा है, तो आप शायद कुछ और गलत कर रहे हैं।
एजेबी

जवाबों:



6

FYI करें - ऐसा लगता है कि मानक का v5 "प्रतिबंध के अज्ञात गुणों" सत्यापन मोड का वर्णन करेगा ।

इसलिए इस आवश्यकता को प्रारूप का हिस्सा बनाने के बजाय (जैसा कि क्रिस पिटमैन टिप्पणियों में कहते हैं, भविष्य की अस्थिरता को नुकसान पहुंचाता है), आप बस अपने सत्यापनकर्ता को अज्ञात गुणों को त्रुटियों के रूप में चिह्नित करने का निर्देश दे सकते हैं। तो, यह एक सुपर-सख्त सत्यापन मोड की तरह है जो देव के लिए उपयोगी है।

कुछ सत्यापनकर्ता पहले से ही इसका समर्थन करते हैं (जैसे tv4 ):

var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties);

इस टूल के साथ checkRecursiveउपयोग किया जाना चाहिए , यदि आपके डेटा में परिपत्र संदर्भ हो सकते हैं, और ठीक वहीbanUnknownProperties करेंगे जो आप चाहते हैं, बिना उपयोग किए ।"additionalProperties":false


3

अपनी परिभाषा प्रदान करें:

  • अंदर सभी आवश्यक फ़ील्ड "required": []
  • और सेट करें "additionalProperties": false

डेमो:

बिना "additionalProperties": false: यहाँ छवि विवरण दर्ज करें

साथ "additionalProperties": false: यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.