如何为属性编写JSON Schema取决于其他字段的值?

时间:2016-11-07 08:41:36

标签: jsonschema

这是我的要求:当num == 0时,需要a;当num == 1时,b是必需的。

{
  "type": "object",
  "properties": {
    "num": { "type": "integer" },
    "a": { "type": "string" },
    "b": { "type": "string" }
  }
  "required": [ "num" ]
}

2 个答案:

答案 0 :(得分:0)

我目前的解决方案:

{
  "type": "object",
  "oneOf": [
    {"$ref": "#/definitions/0"},
    {"$ref": "#/definitions/1"},
  ],
  "definitions": {
    "0": {
      "properties": {
        "num": {"enum": [0]},
        "a": {"type": "string"}
      },
      "required": ["num", "a"]
    },
    "1": {
      "properties": {
        "num": {"enum": [1]},
        "b": {"type": "string"}
      },
      "required": ["num", "b"]
    }
  } 
}

我正在使用jsonschema,它会返回is not exactly on from <#definitions/0>。那不是我想要的。我希望它可以返回有关详细信息的消息,例如a是必需的。

答案 1 :(得分:0)

改进版本:

{
  "type": "object",
  "properties": {
    "num": { "type": "integer" },
    "a": { "type": "string" },
    "b": { "type": "string" }
  }
  "required": [ "num" ],
  "dependencies": {
    "a": {
      "properties": {
        "num": {
          "enum": [0]
        }
      }
    },
    "b": {
      "properties": {
        "num": {
          "enum": [1]
        }
      }
    }
  }
}