JSON और स्कीमा
JSON Schema oneOf बनाम anyOf बनाम allOf
oneOf को ठीक एक मेल खाने वाली शाखा चाहिए, anyOf को कम-से-कम एक और allOf को हर शाखा। जब शाखाएँ ओवरलैप करती हैं, तब अंतर सबसे महत्वपूर्ण है।
प्रकाशित
त्वरित तुलना: oneOf, anyOf और allOf
| कीवर्ड | आवश्यक मिलान | आम उपयोग |
|---|---|---|
| oneOf | ठीक एक | अलग-अलग रूप |
| anyOf | एक या अधिक | ओवरलैप करते स्वीकार्य रूप |
| allOf | हर शाखा | बाधाएँ जोड़ना |
oneOf: ठीक एक स्कीमा से मिलान चाहिए
शून्य शाखाओं से मेल खाने वाला मान विफल है। दो शाखाओं से मेल खाने वाला मान भी विफल है, इसलिए अनिवार्य फ़ील्ड, const या गैर-ओवरलैपिंग बाधाओं से ऑब्जेक्ट रूप अलग करें।
anyOf: एक या अधिक से मिलान हो सकता है
कम-से-कम एक शाखा मेल खाते ही anyOf सफल होता है; कई शाखाओं से मिलान भी मान्य है।
allOf: हर स्कीमा से मिलान चाहिए
allOf बाधाओं का प्रतिच्छेद करता है। वह स्कीमा को दोबारा लिखकर मर्ज नहीं करता और बंद ऑब्जेक्ट के नियमों के साथ उसका व्यवहार अप्रत्याशित हो सकता है।
required, const या enum वाले ऑब्जेक्ट
{
"oneOf": [
{ "required": ["email"], "properties": { "kind": { "const": "email" } } },
{ "required": ["phone"], "properties": { "kind": { "const": "phone" } } }
]
}जेनरेटर क्या अनुमान लगा सकता है और क्या नहीं
- नमूना संरचना और देखे गए प्रकार दिखा सकता है।
- नमूना यह सिद्ध नहीं कर सकता कि रूप परस्पर अनन्य हैं।
- व्यावसायिक विभेदकों और स्वीकार्य विकल्पों के लिए सोच-समझकर स्कीमा डिज़ाइन करना आवश्यक है।
उदाहरण आज़माएँ
ठीक एक संपर्क रूप सत्यापित करें
Const विभेदक email और phone शाखाएँ स्पष्ट रूप से अलग रखते हैं।
oneOf: EmailContact | PhoneContactअपेक्षित परिणाम: email ऑब्जेक्ट ठीक एक शाखा से मेल खाता है।
उदाहरण आज़माएँ
ओवरलैप करती anyOf शाखाएँ स्वीकार करें
धनात्मक पूर्णांक number और integer दोनों बाधाएँ पूरा करके anyOf में मान्य रहता है।
anyOf: [number >= 0, integer]अपेक्षित परिणाम: 4 दोनों शाखाओं से मिलने पर भी मान्य है।
पहले आधार बनाएँ
साझा संरचना बनाएँ
सामान्य फ़ील्ड का अनुमान लगाएँ, फिर संयोजन नियम स्पष्ट रूप से जोड़ें और जाँचें।