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
架空の文字列を列挙型配列に追加できますが、このケースを合法的な方法で検証することは可能ですか? 「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.