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

gupuwyp2  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(103)

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

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

字符串
比如说我想改变它,允许相同的对象,或者是特定对象的数组。这里只接受一个数组:

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


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

ax6ht2ek

ax6ht2ek1#

您可以使用anyOf关键字和definitions/$ref来避免重复。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "assetMetadata": {
      "anyOf": [
        { "$ref": "#/definitions/assetMetaData" },
        {
          "type": "array",
          "description": "...",
          "items": { "$ref": "#/definitions/assetMetaData" }
        }
      ]
    }
  },
  "definitions": {
    "assetMetadata": {
      "type": "object",
      "additionalProperties": false,
      "properties": { ... }
    }
  }
}

字符串

mnowg1ta

mnowg1ta2#

接受的答案在JSON模式验证器中对我不起作用。
阵列未被接受。
我做了一些调整和更改,使其工作,这里是一个示例模式:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "anyOf": [
    {
      "$ref": "#/definitions/commentObject"
    },
    {
      "type": "array",
      "description": "Array of Comment objects",
      "items": {
        "$ref": "#/definitions/commentObject"
      }
    }
  ],
  "definitions": {
    "commentObject": {
      "properties": {
        "number": {
          "type": "integer",
          "minLength": 0,
          "maxLength": 256
        },
        "comment": {
          "type": "string",
          "minLength": 0,
          "maxLength": 256
        }
      },
      "required": [
        "number",
        "comment"
      ],
      "type": "object"
    }
  }
}

字符串
用于测试验证的对象:

{
  "number": 47,
  "comment": "This is a comment",
}


用于测试验证的对象数组:

[
  {
    "number": 47,
    "comment": "This is a comment"
  },
  {
    "number": 11,
    "comment": "This is other comment"
  }
]


JSON Schema Validator for object
JSON Schema Validator for array (of the same objects)

相关问题