2017-06-09 14 views
2

別のプロパティに特定の値がある場合、プロパティが存在することを期待するスキーマを作成する必要があります。値に基づくJSONスキーマの依存関係

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

{"handleFailure":"reject"} 

両方とも有効にする必要がありますが、

{"handleFailure:"redirect"} 

が原因 redirectUrlプロパティが存在しないために有効であってはなりません。

私はそう

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

のような2つのスキーマでトップレベルoneOfを作ってみましたが、私は定義されていないプロパティに関するエラーが発生します。 これを行う方法はありますか?

+0

私はあなたのスキーマを解析し、それに対して妥当性を確認するオブジェクトを作成することができます。あなたは、あなたが得ているエラーメッセージについてより具体的になることができますか? – bhspencer

+1

eachOfスキーマのそれぞれにadditionalPropertiesフラグを入れてみましたか? – bhspencer

+0

ありがとう、旗を動かして解決しました。私はそれを1時間過ごしたとは信じられません。 –

答えて

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" 
      ] 
     } 
     } 
    } 
    ] 
} 
関連する問題