布尔属性A为true时如何要求属性B

时间:2019-12-18 07:21:29

标签: json jsonschema

使用JSON模式,当属性bar(a foo)设置为boolean时,如何指定属性true是必需的?

我尝试了以下操作:

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

但是,这无法验证:

{
  "foo": false
}

因为尽管barfoo,但似乎仍需要false

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
}

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

barfoo时,我如何规定true是必需的?

1 个答案:

答案 0 :(得分:1)

您太近了,无法正确解决这个问题。

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

"foo": { "const": true }

Live demo