JSON 架构:非空元素唯一的数组

JSON Schema: array where non-null elements are unique

我正在尝试构建满足以下条件的 JSON 架构:

  1. 声明一个顶级对象至少有一个 属性
  2. 每个 属性 的值将是一个数组,每个数组必须恰好包含 N
  3. 数组项必须是取自闭区间 [J, K]null
  4. 的整数
  5. 每个数组中的整数项在该数组中必须是唯一的
  6. 没有唯一性约束应用于 null(因此 N 和区间大小 K-J 之间没有隐含关系)

我 运行 遇到的问题是#4 和#5。使用此架构很容易满足前 3 个要求以及第 4 个要求的一部分:

{
  "$schema": "http://json-schema.org/draft/2019-09/schema#",
  "type": "object",
  "minProperties": 1,
  "additionalProperties": {
    "type": "array",
    "minItems": N,
    "maxItems": N,
    "items": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": J,
          "maximum": K
        },
        {
          "type": "null"
        }
      ]
    },
    "uniqueItems": true
  }
}

我不确定如何(或者是否可能)指定一个仅将 uniqueItems 约束应用于允许项的子集的数组。我尝试将 uniqueItems 移动到架构的较低级别,希望它可以在受限范围内运行,但这不起作用。

这也许可以使用条件语句,但我还没有走那条路,因为我不确定它是否真的有效,我希望有一个我忽略的更简单的方法。

所以,我的问题是:有没有一种方法可以指定一个 JSON 模式数组,它有选择地只对不是 null 的项目强制执行唯一性约束?

这超出了 uniqueItems 的能力,也不是 JSON 架构能够表达的约束。您需要在应用程序业务逻辑的其他地方检查此要求。