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 दोनों शाखाओं से मिलने पर भी मान्य है।

पहले आधार बनाएँ

साझा संरचना बनाएँ

सामान्य फ़ील्ड का अनुमान लगाएँ, फिर संयोजन नियम स्पष्ट रूप से जोड़ें और जाँचें।

JSON to JSON Schema Generator खोलें →