JSON模式,允许对象或这些对象的数组

时间:2016-04-04 21:16:49

标签: json jsonschema

假设我有一个允许像这样的对象的JSON模式:

...
  "assetMetadata": {
    "type": "object",
    "additionalProperties": false,
    "properties": { ... }
  }
...

所以说我想改变它以允许同一个对象或该特定对象的数组。这里只接受一个数组:

...
"assetMetadata": {
  "type": "array",
  "description": "...",
  "items": {
    "type": "object",
    "additionalProperties": false,
    "properties": {...}
}
...

属性是相同的(它是同一个对象,只是多个而不是一个的选项)。

有趣的是,在我正在进行的项目中,unmarshaller已经可以处理两者(它将单个对象转换为大小为1的序列),因此纯粹的验证阻止了我前进。我们希望保持与现有API的可比性,这就是我现在不能只需要一个数组的原因。

1 个答案:

答案 0 :(得分:3)

您可以使用anyOf关键字和definitions / $ref来实现此目的,以避免重复。

{
  "type": "object",
  "properties": {
    "assetMetadata": {
      "anyOf": [
        { "$ref": "#/definitions/assetMetaData" },
        {
          "type": "array",
          "description": "...",
          "items": { "#/definitions/assetMetaData" }
        }
      ]
    }
  },
  "definitions": {
    "assetMetadata": {
      "type": "object",
      "additionalProperties": false,
      "properties": { ... }
    }
  }
}