2013-08-22 5 views
20

बाकी सेवा प्रतिक्रिया के साथ मैं उदाहरण का अनुसरण करने के लिए इसी तरह की है काम कर रहा हूँ, मैं सिर्फ 3 क्षेत्रों यहाँ शामिल है, लेकिन कई और अधिक देखते हैं में परिभाषाओं उपयोग कैसे करें:JSON स्कीमा (मसौदा-04)

{ 
    "results": [ 
     { 
      "type": "Person", 
      "name": "Mr Bean", 
      "dateOfBirth": "14 Dec 1981" 
     }, 
     { 
      "type": "Company", 
      "name": "Pi", 
      "tradingName": "Pi Engineering Limited" 
     } 
    ] 
} 

मैं के लिए ऊपर (मसौदा-04) जो स्पष्ट है कि निर्दिष्ट करेगा एक JSON स्कीमा फ़ाइल लिखना चाहते हैं:

if type == Person then list of required properties is ["type", "name", "dateOfBirth", etc] 
OR 
if type == "Company" then list of required properties is ["type", "name", "tradingName", etc] 

हालांकि किसी भी दस्तावेज या इसे कैसे करना का उदाहरण खोजने में असमर्थ हूँ।

वर्तमान में मेरे JSON स्कीमा ऐसा दिखाई देता है:

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "type": "object", 
    "required": ["results" ], 
    "properties": { 
     "results": { 
      "type": "array", 
      "items": { 
       "type": "object", 
       "required": ["type", "name"], 
       "properties": { 
        "type": { "type": "string" }, 
        "name": { "type": "string" }, 
        "dateOfBirth": { "type": "string" }, 
        "tradingName": { "type": "string" } 
       } 
      } 
     } 
    } 
} 

किसी भी संकेत दिए गए/मैं इस कैसे प्रबंधित करें का उदाहरण।

+0

मुझे लगता है कि आप एक विरासत के साथ इस का वर्णन करना चाहिए: लेकिन http://usingjsonschema.com किताब में दोनों संपत्ति और परिभाषा निर्भरता विस्तार से बताया: टाइप व्यक्ति MyObject को बढ़ाता है, टाइप कंपनी MyObject को बढ़ाती है, और आपकी मुख्य स्कीमा में MyObject –

+0

टाइप करने वाले आइटमों के साथ एक सरणी परिभाषित करती है, यह नहीं पता कि JSSSchema XSD के समान कैसे है, लेकिन XSD के बारे में मुझे क्या याद आ सकता है, आपको सामान्य की आवश्यकता नहीं है अपनी वस्तु के लिए superclass। आप स्कीमाफाइल के भीतर अपनी विरासत बल्कि करेंगे। E.g आपके मुख्य स्कीमा में एक सार प्लेसहोल्डर, जो व्यक्ति स्कीमा और कंपनी स्कीमा को अपनी जगह लेने की अनुमति देगा। – atomman

+0

मुझे लगता है कि निर्भरता भी ड्राफ 3 में है। क्या कोई भी ड्राफ्ट 3 और 4 के बीच निर्भरताओं के संबंध में कोई अंतर बता सकता है? – Relequestual

उत्तर

30

मुझे लगता है कि अनुशंसित दृष्टिकोण Json-Schema web, Example2 में दिखाया गया है। आपको "मूल्य से" स्कीमा चुनने के लिए एक enum का उपयोग करने की आवश्यकता है।

{ 
    "type": "object", 
    "required": [ "results" ], 
    "properties": { 
     "results": { 
      "type": "array", 
      "items": { 
       "oneOf": [ 
        { "$ref": "#/definitions/person" }, 
        { "$ref": "#/definitions/company" } 
       ] 
      } 
     } 
    }, 
    "definitions": { 
     "person": { 
      "properties": { 
       "type": { "enum": [ "person" ] }, 
       "name": {"type": "string" }, 
       "dateOfBirth": {"type":"string"} 
      }, 
      "required": [ "type", "name", "dateOfBirth" ], 
      "additionalProperties": false 
     }, 
     "company": { 
      "properties": { 
       "type": { "enum": [ "company" ] }, 
       . . . 
      }   
     } 
    } 
} 
+1

यदि आप केवल जानते हैं कि परिणाम सरणी संपत्ति की सामग्री कुछ अज्ञात उप प्रकार हैं, तो "पार्टी" कहती है, तो आप एक के बजाय क्या उपयोग करेंगे? संबंधित प्रश्न यहां पोस्ट किया गया http://stackoverflow.com/questions/19416873/how-to-tell-json-schema-validator-to-pick-schema-from-property-value :) – redben

9

क्षमा करें,

मैं बात समझ नहीं है: आपके मामले में ऐसा कुछ होगा। सवाल 'निर्भरता' कीवर्ड के बारे में है जो अंतिम JSON स्कीमा विनिर्देश का हिस्सा है, है ना?

मैं स्वीकार किए जाते हैं जवाब (?) में 'निर्भरता' नहीं पाते

यह संक्षिप्त पिछले मसौदे में विस्तार से बताया है। (, देखना पेज 30 पर समझाया)

http://usingjsonschema.com/assets/UsingJsonSchema_20140814.pdf

पेज 29 पर शुरू

"dependencies": { 
    "shipTo":["shipAddress"], 
    "loyaltyId":["loyaltyBonus"] 
} 
+0

हाय सेबेस्टियन, ** निर्भरताओं का उपयोग * * उपरोक्त उपयोग के मामले को हासिल करना संभव है। [कृपया प्रश्न-क्लिक करें] (http://stackoverflow.com/questions/36830827/conditional-json-chechema- validation-based-on-property-value)। क्या किसी अन्य संपत्ति के मूल्य के आधार पर आवश्यक फ़ील्ड बनाना संभव है। अगर आप लिंक में सवाल का जवाब दे सकते हैं तो यह बहुत अच्छा होगा। धन्यवाद, हैरी। – Harry

+0

@ हैरी क्या मुझे वास्तव में आवश्यकता है? "जेसन" द्वारा पूछे जाने के कुछ मिनट बाद जवाब सही है! (अपना प्रश्न देखें) – sebilasse

+1

@ सेबेस्टियनलास, शायद शीर्षक भ्रमित है, लेकिन कृपया मूल प्रश्न पाठ को 'जो स्पष्ट रूप से निर्दिष्ट करेगा' के बाद पढ़ें और आप पाएंगे कि उत्तर प्रश्न आवश्यकताओं को हल करता है। प्रश्न वास्तव में जेसन-स्कीमा 'निर्भरता' कीवर्ड के उपयोग से संबंधित नहीं है। शीर्षक सुधारने के लिए स्वतंत्र महसूस करें। – jruizaranguren

संबंधित मुद्दे