JSON Schema - 枚举或对象

时间:2018-05-30 08:35:09

标签: jsonschema

我试图编写一个模式来验证以下内容。

对象Foo可以包含任意数量的属性,这些属性必须是枚举或Foo的另一个实例。

e.g。假设枚举值是A或B,则有效对象可能看起来像。

{
  "test": "A",
  "test1": "B",
  "test2": {
    "test4": "A",
    "test5": {
      "test6": "B"
    }
  }
}

1 个答案:

答案 0 :(得分:3)

修改

使用自引用的架构越好越短,您可以尝试online

anyOf优于oneOf,因为oneOf需要对所有项进行验证,以确保只有一次传递,但anyOf可以在首次跳过后停止其他项目。

{
  "anyOf": [
    {
      "enum": ["A", "B"]
    },
    {
      "type": "object",
      "additionalProperties": {
        "$ref": "#"
      }
    }
  ]
}

anyOf在根级别需要解决$ref忽略所有同级关键字的JSON架构限制。

选中ajv cli

{
  "anyOf": [
    {"$ref": "#/definitions/Foo"}
  ],
  "definitions": {
    "Foo": {
      "oneOf": [
        {
          "enum": ["A", "B"]
        },
        {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/Foo"
          }
        }
      ]
    }
  }
}