gpt4 book ai didi

arrays - 如何使用 ajv 验证空字符串数组?

转载 作者:行者123 更新时间:2023-12-04 13:44:29 36 4
gpt4 key购买 nike

我使用 ajv 进行 json 验证。我需要验证字符串数组。我知道哪些元素可以放在那里,所以我做了适当的“枚举”。但在某些情况下,枚举可以为空,数组也可以为空。下面是简单的测试:

var schema = {
"type":"array",
"items" : {
"type" : "string",
"enum" : []
}
}

var data = [];

var Ajv = require('./ajv-4.1.1.js');
var ajv = Ajv({
allErrors : true
});
var validate = ajv.compile(schema);
var valid = validate(data);
if (!valid)
console.log(validate.errors);

结果我得到:
Error: schema is invalid:data.items.enum should NOT have less than 1 items, data.items should be array, data.items should match some schema in anyOf

我可以向 enum 数组添加任何虚构的字符串,但是否可以以合法的方式验证这种情况?添加 'minItems=0' 限制无济于事。

我不能使用空枚举真的是 json 模式草案限制吗?

UPD:我希望在一般情况下验证代码:
var array = Object.keys(someObj); // array: ["foo", "bar"]

var schema = {
"type":"array",
"items" : {
"type" : "string",
"enum" : array
}
}

var data = ["foo"]; // valid
var data = ["bar"]; // valid
var data = ["bar","foo"]; // valid

我希望在特殊情况下验证代码:
var array = Object.keys(someObj); // array: []

var schema = {
"type":"array",
"items" : {
"type" : "string",
"enum" : array
}
}

var data = []; // I expect to see it valid too but get error instead.

最佳答案

enum关键字必须至少具有一个值。规范指出...

5.5.1.1. Valid values

The value of this keyword MUST be an array. This array MUST have at least one element. Elements in the array MUST be unique.

Elements in the array MAY be of any type, including null.



这是有道理的,因为一个空的 enum将意味着什么都不会验证。但是,我确实看到它如何在您的特定情况下派上用场。如果您需要动态构建架构,则需要检查空数组情况并使用不同的架构。

这是一种方法:
{
"type": "array",
"maxItems": 0
}

这是另一个:
{
"type": "array",
"not": {}
}

关于arrays - 如何使用 ajv 验证空字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635675/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com