基于属性值的条件Json Schema验证

时间:2016-04-25 01:29:34

标签: arrays json jsonschema

我的输入json如下所示,

{
  "results": [
    {
      "name": "A",
      "testA": "testAValue"
    }
  ]
}

条件是,如果' name'的值是' A'然后' testA'应该是必填字段,如果名称的值是'是' B'然后' testB'应该是必填字段。

这是我试过的Json Schema,它没有按预期工作,

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "required": [
    "results"
  ],
  "properties": {
    "results": {
      "type": "array",
      "oneOf": [
        {
          "$ref": "#/definitions/person"
        },
        {
          "$ref": "#/definitions/company"
        }
      ]
    }
  },
  "definitions": {
    "person": {
      "type": "object",
      "required": [
        "name",
        "testA"
      ],
      "properties": {
        "name": {
          "type": "string",
          "enum": [
            "A"
          ]
        },
        "testA": {
          "type": "string"
        }
      }
    },
    "company": {
      "type": "object",
      "required": [
        "name",
        "testB"
      ],
      "properties": {
        "name": {
          "type": "string",
          "enum": [
            "B"
          ]
        },
        "testB": {
          "type": "string"
        }
      }
    }
  }
}

尝试使用JSON Schema中的" dependecies" ,但无法找到正确的解决方案。

感谢使用Sample JSON Schema实现上述用例的任何帮助/解决方法。

1 个答案:

答案 0 :(得分:4)

你的关闭。您的oneOf必须位于items关键字中。

{
    "type": "array",
    "items": {
        "oneOf": [
            { "$ref": "#/definitions/person" },
            { "$ref": "#/definitions/company" }
        ]
    }
}