JsonArray 元素的类型限制为同一类型,但不限制类型

Limit type of JsonArray elements to the same type, but not limit types

我们有以下JSON:

{ "someName" : [1,2,3,4,5] }

{ "someName" : ["one","two","three"] }

我们想根据 OpenAPI 3.x 规范起草一个 JSON 架构。我们的约束:数组元素可以是整数或字符串,但所有数组元素必须是同一类型。我们的架构如下所示:

{
   "type": "array",
   "items": {
     "oneOf": [
        {"type": "string"},
        {"type": "integer"}
        ]                     
     }
}

确实限制了数组中的数据类型,但仍然允许在一个数组中混合字符串和整数,我们需要避免这种情况。

{"someName" : 1, "two", "three", 4}

我们查看了 this question,但它没有解决一致的数据类型

OpenAPI Schema 中有没有办法强制每个数组的唯一性?

您需要将 oneOf 提升一个级别。此外,anyOf 在这种情况下是更好的选择。本例中的结果相同,但 anyOf 效率更高。

{
   "type": "array",
   "anyOf": [
     { "items": { "type": "string" } },
     { "items": { "type": "integer" } },
   ]                     
}

编辑:回应评论...

要解决此错误,您可以尝试将 type 拉入 anyOf。不幸的是,重复会使架构效率降低,但它可能有助于解决该错误。

{
  "anyOf": [
    {
      "type": "array",
      "items": { "type": "string" }
    },
    {
      "type": "array",
      "items": { "type": "integer" }
    }
  ]
}