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

How to validate empty array of strings with ajv?

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

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

我可以将任何虚构的字符串添加到枚举数组中,但是否可以通过合法方式验证这种情况?添加 'minItems=0' 限制没有帮助。

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

更新:我希望在一般情况下验证代码:

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": {}
}