我正在尝试使用ajv来保证数组遵守关于什么是有效值的严格规则。我不确定要使用哪些修改或其他关键字来实现我正在寻找的结果。可以使用一些见解。
注意:我在不使用JSONSchema验证的情况下以另一种方式工作。我很好奇是否可以使用JSONSchema验证来实现相同的目标。
规则是:
这是一个代码片段,希望能够解释我正在努力实现的目标。谢谢。
const schema = {
"type": "array",
"items": [
{
"type": "string",
"default": ""
},
{
"type": "object",
"default": {}
}
]
};
function fn( array ) {
ajv.validate( schema, array );
console.log( array );
}
fn([]);
fn([ '1' ]);
fn([ { bar: 2} ]);
fn([ 'word', { foo: 3 } ]);
fn([ 'word', 42 ]);
fn([ [ 1, 2, 3 ], { baz: 4 } ]);
fn([ 'word', { a: 1, b: 2 }, 42 ]);
// Actual results:
// [ '', {} ] => Expected
// [ '1', {} ] => Expected
// [ { bar: 2 }, {} ] => Not what I want
// [ 'word', { foo: 3 } ] => Expected
// [ 'word', 42 ] => Not what I want
// [ [ 1, 2, 3 ], { baz: 4 } ] => Not what I want
// [ 'word', { a: 1, b: 2 }, 42 ] => Expected, indices 0 and 1 are all I care about
// Desired results:
// [ '', {} ]
// [ '1', {} ]
// [ '1', { bar: 2 } ]
// [ 'word', { foo: 3 } ]
// [ 'word', {} ]
// [ '', { baz: 4 } ]
// [ 'word', { a: 1, b: 2 }, 42 ]
答案 0 :(得分:1)
JSON Schema仅进行验证。它不会修改正在验证的值。由于您的示例需要在特殊情况下插入值,因此JSON Schema无法执行此操作。
但是,你可能会问,default
怎么样? default
实际上是一个元数据关键字,如title
或description
。它不会以任何方式影响验证。许多图书馆作者已经为此提供了某种支持,但无论他们做什么,都不是标准行为。