json模式,属性存在与否的条件依赖

时间:2017-10-01 07:41:15

标签: json jsonschema json-schema-validator

我有这个模式要求,如果A和B不存在,C必须是,如果C存在,A和B不应该存在。

例如:

{
  "group1": {
    "a": 10
  },
  "group2": {
    "group3": {
      "b": 30
    }
  },
  "group4": {
    "c": 20
  }
}

如果存在a,则bc不应位于json中。 如果存在bc,则a不应位于json中。

我可以看到,在v6 json架构规范中,有一些关键字switch可以帮助满足这些要求但无法使其正常工作。

使用当前规范甚至可以进行架构验证吗?

1 个答案:

答案 0 :(得分:3)

draft-06是当前的规范,但还没有条件。 draft-07有if / then / else使用你可以:

{
  "if": {"required": ["a"]},
  "then": {"not": {"$ref": "#/definitions/bc"}},
  "else": {"$ref": "#/definitions/bc"},
  "definitions": {
    "bc": {
      "anyOf": [
        {"required": ["b"]},
        {"required": ["c"]}
      ]
    }
  }
}

目前,Ajv使用ajv-keywords支持/ then / else。

任何条件都可以使用关键字anyOf,allOf而不是if / then / else来表达:

{
  "anyOf": [
    {"allOf": [ifSchema, thenSchema]},
    {"allOf": [{"not": ifSchema}, elseSchema]}
  ]
}