2017-10-27 7 views
7

इस JSON ऑब्जेक्ट को देखते हुए:JSONSchema और मान्य उप वस्तु गुण

{ 
    "objects": { 
     "foo": { 
      "id": 1, 
      "name": "Foo" 
     }, 
     "bar": { 
      "id": 2, 
      "name": "Bar" 
     } 
    } 
} 

इस उप वस्तुओं के लिए जहां प्रत्येक उप वस्तु एक ही संरचना है जिसमें एक वस्तु है - वे सभी एक ही प्रकार के कर रहे हैं। प्रत्येक उप-ऑब्जेक्ट विशिष्ट रूप से कुंजी है, इसलिए यह नामित सरणी की तरह कार्य करता है।

मैं मान्य करने के लिए है कि objects संपत्ति के भीतर प्रत्येक वस्तु एक JSON स्कीमा संदर्भ के विरुद्ध यहां सत्यापन चाहते हैं।

तो objects संपत्ति जैसे एक सरणी, था: क्योंकि typearray है

{ 
    "id": "my-schema", 
    "required": [ 
    "objects" 
    ], 
    "properties": { 
    "objects": { 
     "type": "array", 
     "items": { 
     "type": "object", 
     "required": [ 
      "id", 
      "name" 
     ], 
     "properties": { 
      "id": { 
      "type": "integer" 
      }, 
      "name": { 
      "type": "string" 
      } 
     } 
     } 
    } 
    } 
} 

यह हासिल की है, और:

{ 
    "objects": [ 
    { 
     "id": 1, 
     "name": "Foo" 
    }, 
    { 
     "id": 2, 
     "name": "Bar" 
    } 
    ] 
} 

मैं जैसे एक स्कीमा परिभाषा के साथ इस को मान्य कर सकता है यह items की प्रमाणीकरण की अनुमति देता है।

यह लेकिन नेस्टेड वस्तुओं के साथ कुछ ऐसा ही करना संभव है?

धन्यवाद!

उत्तर

3

आप कुछ इस तरह की कोशिश कर सकते हैं:

{ 
    "id": "my-schema", 
    "type": "object", 
    "properties": { 
    "objects": { 
     "type": "object", 
     "patternProperties": { 
     "[a-z]+": { 
      "type": "object", 
      "properties": { 
      "id": { 
       "type": "integer" 
      }, 
      "name": { 
       "type": "string" 
      } 
      }, 
      "additionalProperties": false, 
      "required": [ 
      "id", 
      "name" 
      ] 
     } 
     } 
    } 
    } 
} 
0

ऊपर जवाब छोटे अक्षरों को वस्तु संपत्ति के नाम को सीमित करने के लिए काम करता है। आप संपत्ति के नाम को प्रतिबंधित करने की जरूरत नहीं है, तो यह सरल है:

{ 
    "id": "my-schema", 
    "type": "object", 
    "properties": { 
    "objects": { 
     "type": "object", 
     "additionalProperties": { 
     "type": "object", 
     "properties": { 
      "id": { 
      "type": "integer" 
      }, 
      "name": { 
      "type": "string    } 
      } 
     }, 
     "required": [ 
      "id", 
      "name" 
     ] 
     } 
    } 
    } 
} 

मैं ऊपर जवाब से भीतरी "additionalProperties": false छोड़े गए क्योंकि मुझे लगता है कि उस कीवर्ड का उपयोग कर अधिक समस्याओं का कारण बनता की तुलना में यह हल करती है, लेकिन यह एक है यदि आप "नाम" और "आईडी" के अलावा अन्य गुणों के भीतर आंतरिक वस्तुओं पर असफल होने के लिए सत्यापन चाहते हैं तो कीवर्ड का वैध उपयोग।

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