JSON模式中有序数组中的条件条件 [英] Conditional criteria in ordered array in JSON Schema
本文介绍了JSON模式中有序数组中的条件条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们目前正在考虑从基于代码的验证转移到JSON架构驱动的验证器。
对于我们来说,一种常见的场景是在一个有序数组中的一个数组项中更改我们的验证条件,这取决于它之前的数组项的值。一个常见的例子是,数组项表示电子表格中的列或行。使用现有系统(如IF-THEN)可以做到这一点吗?如果是,如何?
非常感谢
推荐答案
具体取决于您的约束是什么,您可以使用JSON模式执行一些操作。您不能执行相对索引,例如:如果数组项的值是,则它之前/之后的项必须是大于3的数字。但您可以表示如下内容:如果索引2处的项是&q;foo&q;,则索引3处的项必须是大于3的数字。但是,您受到静态断言的限制,这意味着您不能断言一个字段的值相对于另一个字段的值。例如,您可以表示:索引2中的项目大于索引3中的项目。
下面是您可以做出的断言类型的一个示例。这表达了上一段中给出的示例:如果索引%2处的项目是";foo;,则索引%3处的项目必须是大于3的数字。
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"prefixItems": [
{ "type": "boolean" },
{ "type": "string" },
{ "type": "string" },
{ "type": "number" }
],
"if": {
"type": "array",
"prefixItems": [
true,
true,
{ "const": "foo" }
],
"minItems": 3
},
"then": {
"prefixItems": [
true,
true,
true,
{ "exclusiveMinimum": 3 }
]
}
}
如果您使用的是早于2020-12的草稿,则可以将prefixItems
更改为items
以获得相同的结果。一般模式是先在顶层表示模式的一般约束,然后在下面表示条件。我们希望if
与第三个值匹配,而不关心前两个值,因此我们可以将true
或{}
存根放入这些槽中。同样的概念也适用于then
。如果您有很多项,这可能会导致很多true
,但没有办法解决它,因为无法指定模式应用到的索引。minItems
也很重要,否则如果第三项不存在,if
将匹配。
这篇关于JSON模式中有序数组中的条件条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文