web-dev-qa-db-ja.com

JSONスキーマ-オブジェクトに特定のプロパティが*含まれていない*場合に有効

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 }
18
M Miller

やりたいことは、notキーワードを使用して実現できます。 notスキーマが検証される場合、親スキーマは検証されません。

{
    "type": "object",
    "properties": {
        "x": { "type": "integer" }
    },
    "required": [ "x" ],
    "not": { "required": [ "z" ] }
}
25

より簡単なアプローチがあります。 xが存在する場合、どのスキーマも満たさないようにする必要があることを定義します。不条理への還元により、xは存在できません:

{
    "properties" : {
        "x" : {
            "not" : {}

        }
    }
}
17
jruizaranguren

フィールドがないことを指定するには、そのタイプがnullであると期待できます。

{
    "type": "object",
    "properties": {
        "x": { "type": "integer" },
        "z": { "type": "null" }

    },
    "required": [ "x" ]
}
4
Tomás Senart

"additionalProperties": falseを介して追加のプロパティを禁止することで問題を解決しましたが、patternPropertiesを使用して、禁止されたもの以外のすべてのプロパティ名を許可しました。

{
    "type": "object",
    "properties": {
        "x": { "type": "integer" }
    },
    "required": [ "x" ],
    "patternProperties": {
        "^(?!^z$).*": {}
    },
    "additionalProperties": false
}
4
M Miller