2017-06-09 80 views
2

如果另一個屬性具有特定值,我需要創建一個預期屬性存在的模式。基於值的JSON模式依賴關係

{"handleFailure":"redirect","redirectUrl":"http://something.com"} 

{"handleFailure":"reject"} 

都應該是有效的,但

{"handleFailure:"redirect"} 

不應該是有效的,由於不存在的redirectUrl財產。

我試圖做一個頂級oneOf與兩個模式,像這樣

{ 
    "type": "object", 
    "additionalProperties": false, 
    "oneOf": [ 
    { 
     "properties": { 
     "handleFailure": { 
      "type": "string", 
      "enum": [ 
      "redirect" 
      ] 
     }, 
     "redirectUrl": { 
      "type": "string", 
      "format": "uri" 
     } 
     } 
    }, 
    { 
     "properties": { 
     "handleFailure": { 
      "type": "string", 
      "enum": [ 
      "reject" 
      ] 
     } 
     } 
    } 
    ] 
} 

,但我得到一個錯誤有關未被定義的屬性。 有沒有辦法做到這一點?

+0

我能夠解析您的模式並創建對其進行驗證的對象。你能更具體地瞭解你所得到的錯誤信息嗎? – bhspencer

+1

你有沒有試過把additionalProperties標誌放在每個oneOf模式中? – bhspencer

+0

謝謝,移動國旗解決了它。不敢相信我花了一個小時。 –

回答

1

"additionalProperties": false標誌插入到子模式中,以防止這些對象具有其他屬性。

{ 
    "type": "object", 
    "additionalProperties": false, 
    "oneOf": [ 
    { 
     "additionalProperties": false, 
     "properties": { 
     "handleFailure": { 
      "type": "string", 
      "enum": [ 
      "redirect" 
      ] 
     }, 
     "redirectUrl": { 
      "type": "string", 
      "format": "uri" 
     } 
     } 
    }, 
    { 
     "additionalProperties": false, 
     "properties": { 
     "handleFailure": { 
      "type": "string", 
      "enum": [ 
      "reject" 
      ] 
     } 
     } 
    } 
    ] 
}