当布尔值 属性 A 为真时如何要求 属性 B

How to require a property B when a boolean property A is true

使用JSON架构,当属性fooboolean)是时,如何指定属性bar是必需的设置为 true?

我试过以下方法:

{
  "type": "object",
  "properties": {
    "foo": { "type": "boolean" },
    "bar": { "type": "string" }
  },
  "if": {
    "properties": {
      "foo": { "boolean": true }
    },
    "required": ["foo"]
  },
  "then": { "required": ["bar"] }
}

但是,这无法验证:

{
  "foo": false
}

因为尽管 foofalse:

,但似乎仍然需要 bar
Message:
    Required properties are missing from object: bar.
Schema path:
    #/then/required

我也试过这个:

{
  "type": "object",
  "properties": {
    "foo": { "type": "boolean" },
    "bar": { "type": "string" }
  },
  "if": {
    "properties": {
      "foo": { "const": "true" }
    },
    "required": ["foo"]
  },
  "then": { "required": ["bar"] }
}

但是这个接受下面的JSON,这应该被认为是无效的:

{
  "foo": true
}

我已经看过 ,但它使用类型 string 作为 foo,效果很好。我需要 foo 才能成为 boolean

footrue时,如何规定bar

您差一点就做对了。

您对 const 的使用是正确的,但该值是一个字符串而不是布尔值。你想要...

"foo": { "const": true }

Live demo