如何描述属性的互斥值?

How do I describe mutually exclusive values of properties?

我有两个属性(propOne 和 propTwo)。

如果其中一个属性值为 true,则另一个必须设置为 false。

如何在 jsonschema 中描述它?

我可以说如果 propOne 是真的需要 propTwo,但这还不够:

"anyOf": [
    {
        "not": {
            "properties": {
                "propOne": {
                    "const": true
                }
            },
            "required": [
                "propOne"
            ]
        }
    },
    {
        "required": [
            "propTwo"
        ]
    }
],

描述我的要求最简洁的方式是什么?

编辑: 根据答案,这就是我想要的。我知道有几种方法可以描述这一点。好像oneOf是最简洁的?我想如果条件需要更多行?

"oneOf": [
    {
        "type": "object",
        "properties": {
            "propOne": {
                "const": true
            },
            "propTwo": {
                "const": false
            }
        }
    },
    {
        "type": "object",
        "properties": {
            "propOne": {
                "const": true
            },
            "propTwo": {
                "const": false
            }
        }
    }
],

有if/then/else个关键字,还有oneOf(见https://json-schema.org/understanding-json-schema/reference/conditionals.html

所以,在伪代码中:

  • 必须是对象。
  • 需要 propOne 和 propTwo。
  • propOne 是一个布尔值。
  • propTwo 是一个布尔值。

并且其中任何一个是等价的(当与上述限制相结合时):

  • 如果 propOne 为真,则 propTwo 为假,否则 propTrue 为真。
  • 其中之一:
    • propOne 为真,propTwo 为假。
    • propOne 为假,propTwo 为真。