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

Posted

技术标签:

【中文标题】如何使用ajv验证空字符串数组?【英文标题】:How to validate empty array of strings with ajv? 【发布时间】:2016-10-04 18:39:10 【问题描述】:

我使用 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.

【问题讨论】:

我不清楚您要完成什么。您能否在您的问题中添加一些您希望验证的 JSON 示例以及一些您希望验证失败的示例。如果我能更好地理解问题,我相信我可以提供帮助。 根据我的期望添加了 UPD。 【参考方案1】:

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

5.5.1.1。有效值

这个关键字的值必须是一个数组。这个数组必须至少有一个元素。数组中的元素必须是唯一的。

数组中的元素可以是任何类型,包括 null。

http://json-schema.org/latest/json-schema-validation.html#anchor76

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

这是一种方法:


  "type": "array",
  "maxItems": 0

这是另一个:


  "type": "array",
  "not": 

【讨论】:

以上是关于如何使用ajv验证空字符串数组?的主要内容,如果未能解决你的问题,请参考以下文章

对象数组的 AJV 模式验证

如何使用带有 Ajv 的正则表达式验证字符串?

使用 AJV 的 json 模式中的空值验证

C语言中,如何将一串字符数组形成字符串

如何在 Typescript 中创建一个空字符串数组?

c语言如何将一串字符数据写入字符串数组