JSON 架构:非空元素唯一的数组
JSON Schema: array where non-null elements are unique
我正在尝试构建满足以下条件的 JSON 架构:
- 声明一个顶级对象至少有一个 属性
- 每个 属性 的值将是一个数组,每个数组必须恰好包含
N
项
- 数组项必须是取自闭区间
[J, K]
或 null
的整数
- 每个数组中的整数项在该数组中必须是唯一的
- 没有唯一性约束应用于
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 架构能够表达的约束。您需要在应用程序业务逻辑的其他地方检查此要求。
我正在尝试构建满足以下条件的 JSON 架构:
- 声明一个顶级对象至少有一个 属性
- 每个 属性 的值将是一个数组,每个数组必须恰好包含
N
项 - 数组项必须是取自闭区间
[J, K]
或null
的整数
- 每个数组中的整数项在该数组中必须是唯一的
- 没有唯一性约束应用于
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 架构能够表达的约束。您需要在应用程序业务逻辑的其他地方检查此要求。