如何根据属性计数应用约束?

问题描述 投票:0回答:1

我正在尝试编写一个模式来验证这种类型的 json

{
    "Steps": {
        "0": {
            "something": "something"
        },
        "1": {
            "something": "something"
        }
    }
}

有约束: 1:Steps可以为空,即{"Steps":{}}即可 2:键值可以是0到99。 3:如果Steps不为空,则其中必须有key 0。

我已使用patternProperties 对键名称应用约束(约束2)

{
    "Steps": {
        "patternProperties": {
            "^[0-9]$|^[1-9][0-9]$": {
                "type": "object",
                "$ref": "#/$defs/StepDetails"
            }
        },
        "additionalProperties": false
    }
}

但是我不知道如何应用上面的约束3。我不想无条件地要求属性“0”,因为这会干扰我的约束号 1,所以我如何指定“如果步骤中的属性计数 > 0,则需要属性“0””

谢谢,

我想 minProperties 和 maxProperties 在这里没有用。

json properties constraints jsonschema json-schema-validator
1个回答
0
投票

这似乎有效,但我希望有一个更优雅的 if-then 类型的解决方案

{
"Steps": {
    "patternProperties": {
        "^[0-9]$|^[1-9][0-9]$": {
            "type": "object",
            "$ref": "#/$defs/StepDetails"
        }
    },
    "additionalProperties": false,
    "anyOf": [
        {
            "required": [
                "0"
            ]
        },
        {
            "maxProperties": 0
        }
    ]
}

}

© www.soinside.com 2019 - 2024. All rights reserved.