JSON Schema - 不同对象的数组

时间:2018-01-30 17:41:55

标签: json swagger jsonschema swagger-2.0

我想知道如何为不同对象的数组指定JSON模式。 This thread给了我一半答案,但是当我有每种类型对象的多个实例时失败。

以下是一个示例XML,基于example given here,但重复了“ Product ”对象: -

{
  "things": [
    {
      "entityType" : "Product",
      "name" : "Pepsi Cola",
      "brand" : "pepsi"
    },
    {
      "entityType" : "Product",
      "name" : "Coca Cola",
      "brand" : "coke"
    },
    {
      "entityType" : "Brand",
      "name" : "Pepsi Cola"
    }
  ]
}

以下架构仅在每种类型的单个实例(即“产品”仅出现一次)时验证上述XML。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "https://schemas.example.com/things",
  "title": "Things",
  "description": "Some things",
  "type": "object",
  "required": [
    "things"
  ],
  "properties": {
    "things": {
      "type": "array",
      "items": [
        {
          "type": "object",
          "required": [
            "entityType",
            "name"
          ],
          "properties": {
            "entityType": {
              "type": "string",
              "enum": [
                "Product"
              ]
            },
            "name": {
              "type": "string"
            },
            "brand": {
              "type": "string"
            }
          }
        },
        {
          "type": "object",
          "required": [
            "entityType",
            "name"
          ],
          "properties": {
            "entityType": {
              "type": "string",
              "enum": [
                "Brand"
              ]
            },
            "name": {
              "type": "string"
            }
          }
        }
      ]
    }
  },
  "additionalProperties": false
}

要添加娱乐内容,我无法使用“ AnyOf ”等关键字,因为我将此架构嵌入到Swagger 2.0文档中,并且不支持这些关键字。

谢谢,

学家

1 个答案:

答案 0 :(得分:1)

没有anyOf你运气不好。您可以做的最好的事情是使用一个涵盖所有选项的架构。这不是一个很好的解决方案,但它总比没有好。