基于值的JSON Schema依赖关系

时间:2017-06-09 16:53:56

标签: jsonschema

如果另一个属性具有特定值,我需要创建一个期望属性存在的模式。

{"handleFailure":"redirect","redirectUrl":"http://something.com"}

{"handleFailure":"reject"}

应该都有效,但

{"handleFailure:"redirect"}

由于redirectUrl属性不存在而无法生效。

我尝试使用两个模式(例如

)创建顶级oneOf
{
  "type": "object",
  "additionalProperties": false,
  "oneOf": [
    {
      "properties": {
        "handleFailure": {
          "type": "string",
          "enum": [
            "redirect"
          ]
        },
        "redirectUrl": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "properties": {
        "handleFailure": {
          "type": "string",
          "enum": [
            "reject"
          ]
        }
      }
    }
  ]
}

但是我收到有关未定义属性的错误。 有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

"additionalProperties": false标志插入子模式,以防止这些对象具有其他属性。

{
  "type": "object",
  "additionalProperties": false,
  "oneOf": [
    {
      "additionalProperties": false,
      "properties": {
        "handleFailure": {
          "type": "string",
          "enum": [
            "redirect"
          ]
        },
        "redirectUrl": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "additionalProperties": false,
      "properties": {
        "handleFailure": {
          "type": "string",
          "enum": [
            "reject"
          ]
        }
      }
    }
  ]
}