AJV 自定义关键字验证
AJV custom keyword validation
我正在使用 AJV 库来验证我的 JSON 模式。我希望能够验证 Startdate
是一个字符串。在不是字符串的情况下,应该转成N/A
。目前,它只能将 undefined
转换为 N/A
。
但是,在这些情况下它无法按预期工作:
null
-> "null"
- 0 --> “0”
- 正确 --> "true"
如果我希望将以上所有内容都转换为 N/A
字符串,我的 customKeyword 函数会是什么样子?
JSON 回复:
jsonResponse: {
"Issue": {
"StartDate": "December 17, 1995 03:24:00"
}
}
架构:
var ajv = new Ajv({
useDefaults: true,
coerceTypes: 'undefined'
});
const schema = {
"type": "object",
"properties": {
"Issue": {
"type": "object",
"properties": {
"StartDate": {
"type": "string"
"default": "N/A",
"stringTypeChecker"
}
}
}
}
}
添加关键字函数:
ajv.addKeyword('stringTypeChecker', {
modifying: true,
validate: function(){
let foo = []
console.log(foo)
}
});
var valid = ajv.validate(schema, jsonResponse);
您不需要 coerceTypes 选项。
关键字必须是:
ajv.addKeyword('stringTypeChecker', {
modifying: true,
schema: false, // keyword value is not used, can be true
valid: true, // always validates as true
validate: function(data, dataPath, parentData, parentDataProperty){
if (typeof data != 'string' && parentData) // or some other condition
parentData[parentDataProperty] = 'N/A';
}
});
架构:
{
"type": "object",
"properties": {
"Issue": {
"type": "object",
"properties": {
"StartDate": {
"type": "string",
"default": "N/A",
"stringTypeChecker": true
}
}
}
}
}
我正在使用 AJV 库来验证我的 JSON 模式。我希望能够验证 Startdate
是一个字符串。在不是字符串的情况下,应该转成N/A
。目前,它只能将 undefined
转换为 N/A
。
但是,在这些情况下它无法按预期工作:
null
-> "null"- 0 --> “0”
- 正确 --> "true"
如果我希望将以上所有内容都转换为 N/A
字符串,我的 customKeyword 函数会是什么样子?
JSON 回复:
jsonResponse: {
"Issue": {
"StartDate": "December 17, 1995 03:24:00"
}
}
架构:
var ajv = new Ajv({
useDefaults: true,
coerceTypes: 'undefined'
});
const schema = {
"type": "object",
"properties": {
"Issue": {
"type": "object",
"properties": {
"StartDate": {
"type": "string"
"default": "N/A",
"stringTypeChecker"
}
}
}
}
}
添加关键字函数:
ajv.addKeyword('stringTypeChecker', {
modifying: true,
validate: function(){
let foo = []
console.log(foo)
}
});
var valid = ajv.validate(schema, jsonResponse);
您不需要 coerceTypes 选项。
关键字必须是:
ajv.addKeyword('stringTypeChecker', {
modifying: true,
schema: false, // keyword value is not used, can be true
valid: true, // always validates as true
validate: function(data, dataPath, parentData, parentDataProperty){
if (typeof data != 'string' && parentData) // or some other condition
parentData[parentDataProperty] = 'N/A';
}
});
架构:
{
"type": "object",
"properties": {
"Issue": {
"type": "object",
"properties": {
"StartDate": {
"type": "string",
"default": "N/A",
"stringTypeChecker": true
}
}
}
}
}