“不是”“必需”组合

时间:2019-09-12 12:15:08

标签: jsonschema

我已经定义了具有某些属性的架构...基于条件,我想禁用/启用属性...此外,我也需要一些默认行为... 注意:“ additionalProperties”将始终为false。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/TestProperties",
  "TestProperties": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "A": { "$ref": "#/valueDefinition/stringObject" },
      "B": { "$ref": "#/valueDefinition/stringObject" },
      "C": { "$ref": "#/valueDefinition/stringObject" },
      "D": { "$ref": "#/valueDefinition/stringObject" },
      "E": { "$ref": "#/valueDefinition/stringObject" }
    },
    "if": {
      "properties": {
        "A": { "const": "Start" }
      }
    },
    "then": {
      "not": { "required": ["C", "D", "E"] },
      "required": ["B"]
    },
    "else": {
      "if": {
        "properties": {
          "taskType": { "const": "Stop" }
        }
      },
      "then": {
        "not": { "required": ["D", "E"] },
        "required": ["B", "C"]
      },
      "else": {
        "not": { "required": ["B", "C"] },
        "required": ["D", "E"]
      }
    }
  },
  "valueDefinition": {
    "stringObject": {
      "type": "string",
      "pattern": "^(?!\\s*$).+"
    }
  }
}

如果我输入的是

{
  "A":"Start",
},

抛出错误,说缺少必填项...

如果我输入的是

{
  "A":"Start",
  "B":"xxxx"
}

它显示为有效的JSON ...

但是,如果我输入的是

{
  "A":"Start",
  "B":"xxxx",
  "C":"yyyy"
}

它没有抛出任何错误...我的期望是它不应该容纳C

1 个答案:

答案 0 :(得分:0)

只有当所有“ C”,“ D”和“ E”都不存在时,类似以下内容的内容才有效。

"not": { "required": ["C", "D", "E"] },

如果不存在“ C”,“ D”或“ E”中的任何一个,则您希望它有效。

"not": {
  "anyOf": [
    { "required": ["C"] },
    { "required": ["D"] },
    { "required": ["E"] }
  ]
}