2017-01-25 6 views
0

スキーマはjsonオブジェクトに続いて検証する必要があり、追加プロパティを許可しないでください。他のプロパティの条件付き存在を強制するためにjsonスキーマを書くには?

{ 
    "id": "11111111111111111111111111111111", 
    "status": "employed", 
    "company_name": "Google" 
} 

{ 
    "id": "00000000000000000000000000000000", 
    "status": "unemployed" 
} 

スキーマのドラフトV4:

{ 
    "type": "object", 
    "additionalProperties":false, 
    "required": [ 
    "status", 
    "id" 
    ], 
    "properties": { 
    "id": { 
     "type": "string" 
    }, 
    "status": { 
     "type": "string", 
     "enum":["unemployed", "employed"] 
    }, 
    "company_name": { 
     "type": "string" 
    } 
    }, 
    "dependencies": { 
    "company_name": { 
     "properties": { 
     "status": { 
      "enum": [ 
      "employed" 
      ] 
     } 
     } 
    } 
    } 
} 

このスキーマは、右に見えるが、それはJSONオブジェクトには、次のではない無効化を行います。

{ 
    "id": "00000000000000000000000000000001", 
    "status": "employed" 
} 

"ステータス"が "採用"されていても必須のプロパティ "company_name"が指定されていないため、無効にする必要があります。

+0

参照http://stackoverflow.com/questions/41837518/removing-the-duplication-in-a-json-schema-that-uses-oneof-v4-or-v5/41838321?noredirect=1#comment70862053_41838321 – esp

+0

@ espそこにはっきりとはっきりしていません。私の観察によれば:私は最後のもの(最高のもの)を使用しています:)私が紛失しているものがありますか? – Nilesh

+0

@ esp私は答えを追加しました。 **依存関係を使用して**これを行う方法に別の答えを加えてください** ** – Nilesh

答えて

1

これはanyOfが、dependenciesを使用してそれを行う方法がわからないを使用して可能です。

{ 
    "type": "object", 
    "additionalProperties": false, 
    "required": [ 
    "status", 
    "id" 
    ], 
    "properties": { 
    "id": { 
     "type": "string" 
    }, 
    "status": { 
     "type": "string", 
     "enum": [ 
     "unemployed", 
     "employed" 
     ] 
    }, 
    "company_name": { 
     "type": "string" 
    } 
    }, 
    "anyOf": [ 
    { 
     "properties": { 
     "status": { 
      "enum": [ 
      "employed" 
      ] 
     } 
     }, 
     "required": [ 
     "company_name" 
     ] 
    }, 
    { 
     "properties": { 
     "status": { 
      "enum": [ 
      "unemployed" 
      ] 
     } 
     }, 
     "not": { 
     "required": [ 
      "company_name" 
     ] 
     } 
    } 
    ] 
} 

@espのおかげです。

関連する問題