【发布时间】:2020-08-02 08:21:22
【问题描述】:
我正在尝试定义一个模式来验证这种类型的数据数组:
[
'item1 string', // item1, being a given string
2, // item2, an integer
'item3 string', // item3, a variable string, repeated N times
'another item3 string', // ...
...
'last item3 string', //
1.1, // item4, a number
]
item3 是字符串的集合,它会有所不同。没有重复,我的架构的简化版本是:
{
type: 'array',
minItems: 4,
maxItems: 4,
items: [
{ $ref: '#/definitions/item1' },
{ $ref: '#/definitions/item2' },
{ $ref: '#/definitions/item3' },
{ $ref: '#/definitions/item4' },
],
definitions: {
item1: { type: 'string' },
item2: { type: 'integer' },
item3: { type: 'string' },
item4: { type: 'number' },
},
}
我希望我的“项目”部分是一个数组,因为我想确保项目以正确的方式排序。但我不明白如何描述“item3”元素的重复。
我实际上提前知道了我期望的“item3”出现次数,所以现在我为每次检查重建架构(调整 mix/maxItems,并重复 item3 部分)。
但是有没有更有效的方法来解决这个问题?此架构用于 nodejs / ajv,如果在架构内不可行,是否有一个 ajv 功能会有所帮助? 谢谢。
【问题讨论】:
-
嗨,威尔,我很想听听您的用例在这里,我的意思是实际数据/想要这个的原因是什么?在评估要添加到 JSON Schema 中的内容时,我们通常需要现实生活中的示例,因此我们根据实际需求而非学术理想进行更改。谢谢。
-
嗨。也许我没有为此使用理想的工具,但这里我使用 ajv 来验证一些大型 sql 查询结果。 sql 查询的长度不同,指令是根据手头的情况构建和添加的。中间的指令都是一样的,它们是对应于我的例子的“item3”的,它们的结果都是使用相同的定义检查的。我不能对指令重新排序,这些重复指令之前和之后的指令必须按照这个顺序排列(比这个例子中的要多,而且架构当然更复杂)。如果您有任何问题,请告诉我,谢谢。
-
我刚刚有了一个想法。如果您愿意并且能够将实现更改为(JASON Desrosiers 自己的)Hyper Jump 以进行 JSON Schema 验证,并更新为使用 JSON Schema 草案
2019-09...我将能够为您提供完整的今天晚些时候的解释和例子! =] -
等等,不,我要疯了。没关系... =[
-
@Relequestual 很好,感谢您对此进行调查 :-) 我想我正在寻找的是一种“正则表达式”,但是将 json 模式放在一起,而不是字符串检查......也许它将成为未来架构规范的一部分!
标签: json jsonschema ajv