2016-07-05 40 views
0

我有一個請求兩個可能的JSON對象的對象:JSON模式用於與任一A和B或C所要求的特性

{ 
    "from": "string", 
    "to": "string", 
    "text": "string" 
} 

{ 
    "number": "integer", 
    "text": "string" 
} 

在兩種情況下「文本」屬性是可選的。其它性能要求(無論是「數,或兩者‘從’和‘到’)。

會有什麼正確的JSON架構驗證這一點?

+0

可能重複[JSON模式:我如何需要一個領域或另一個或(其他兩個之一),但不是全部?](http://stackoverflow.com/questions/24023536/json-schema-how -do-i-require-one-field-or-another-or-one-two-others-but-no) –

回答

2

這是另一個我認爲更清晰的解決方案dependencies條款確保「from」和「to」總是成對,然後oneOf條款可以非常簡單,並避免不需要的樣板文件。

{ 
    "type": "object", 
    "properties": { 
    "from": { "type": "string" }, 
    "to": { "type": "string" }, 
    "number": { "type": "integer" }, 
    "text": { "type": "string" } 
    }, 
    "dependencies": { 
    "from": ["to"], 
    "to": ["from"] 
    }, 
    "oneOf": [ 
    { "required": ["from"] }, 
    { "required": ["number"] } 
    ] 
} 
+0

不錯!非常感謝 –

0

最後設法建立正確的方案。

{ 
    "definitions": { 
    "interval": { 
     "type": "object", 
     "properties": { 
     "from": { 
      "type": "string" 
     }, 
     "to": { 
      "type": "string" 
     }, 
     "text": { 
      "type": "string" 
     } 
     }, 
     "required": ["from", "to"], 
     "not": { 
     "required": ["number"] 
     } 
    }, 
    "top": { 
     "type": "object", 
     "properties": { 
     "number": { 
      "type": "integer" 
     }, 
     "text": { 
      "type": "string" 
     } 
     }, 
     "required": ["number"], 
     "allOf": [ 
     { 
      "not": { 
      "required": ["from"] 
      } 
     }, 
     { 
      "not": { 
      "required": ["to"] 
      } 
     } 
     ] 

    } 
    }, 
    "type": "object", 
    "oneOf": [ 
    {"$ref": "#/definitions/interval"}, 
    {"$ref": "#/definitions/top"} 
    ] 
} 
相關問題