additionalProperties
を許可するJSONスキーマを設定することは可能ですか?ただし、非常に特定のプロパティ名が存在する場合、notは一致しますか?言い換えれば、required
宣言の正反対を持つことが可能かどうかを知る必要があります。
スキーマ:
{
"type": "object",
"properties": {
"x": { "type": "integer" }
},
"required": [ "x" ],
"ban": [ "z" ] // possible?
}
一致:
{ "x": 123 }
一致:
{ "x": 123, "y": 456 }
行うない一致:
{ "x": 123, "y": 456, "z": 789 }
やりたいことは、not
キーワードを使用して実現できます。 not
スキーマが検証される場合、親スキーマは検証されません。
{
"type": "object",
"properties": {
"x": { "type": "integer" }
},
"required": [ "x" ],
"not": { "required": [ "z" ] }
}
より簡単なアプローチがあります。 xが存在する場合、どのスキーマも満たさないようにする必要があることを定義します。不条理への還元により、xは存在できません:
{
"properties" : {
"x" : {
"not" : {}
}
}
}
フィールドがないことを指定するには、そのタイプがnull
であると期待できます。
{
"type": "object",
"properties": {
"x": { "type": "integer" },
"z": { "type": "null" }
},
"required": [ "x" ]
}
"additionalProperties": false
を介して追加のプロパティを禁止することで問題を解決しましたが、patternProperties
を使用して、禁止されたもの以外のすべてのプロパティ名を許可しました。
{
"type": "object",
"properties": {
"x": { "type": "integer" }
},
"required": [ "x" ],
"patternProperties": {
"^(?!^z$).*": {}
},
"additionalProperties": false
}