【问题标题】:JSON Schema Dependency based on value基于值的 JSON Schema 依赖
【发布时间】:2017-11-11 18:51:45
【问题描述】:

如果另一个属性具有特定值,我需要创建一个预期属性存在的架构。

{"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"
          ]
        }
      }
    }
  ]
}

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

【问题讨论】:

  • 我能够解析您的架构并创建对其进行验证的对象。您能否更具体地说明您收到的错误消息?
  • 您是否尝试过将 additionalProperties 标志放入每个 oneOf 架构中?
  • 谢谢,移动标志解决了它。不敢相信我花了一个小时。

标签: jsonschema


【解决方案1】:

"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"
          ]
        }
      }
    }
  ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多