Javascript AJV自定义关键字验证
我正在使用AJV库验证我的JSON模式。我希望能够验证Javascript AJV自定义关键字验证,javascript,json,validation,jsonschema,ajv,Javascript,Json,Validation,Jsonschema,Ajv,我正在使用AJV库验证我的JSON模式。我希望能够验证Startdate是否为字符串。如果不是字符串,则应将其转换为N/a。目前,它仅将未定义的转换为N/A 但是,在这些情况下,它并没有如预期的那样工作: null->“null” 0-->“0” 真-->“真” 如果我想将上述所有内容转换为N/A字符串,我的customKeyword函数会是什么样子 JSON响应: jsonResponse: { "Issue": { "StartDate": "December 17, 199
Startdate
是否为字符串。如果不是字符串,则应将其转换为N/a
。目前,它仅将未定义的
转换为N/A
但是,在这些情况下,它并没有如预期的那样工作:
->“null”null
- 0-->“0”
- 真-->“真”
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"
}
}
}
}
}
{
"type": "object",
"properties": {
"Issue": {
"type": "object",
"properties": {
"StartDate": {
"type": "string",
"default": "N/A",
"stringTypeChecker": true
}
}
}
}
}
addKeyword函数:
ajv.addKeyword('stringTypeChecker', {
modifying: true,
validate: function(){
let foo = []
console.log(foo)
}
});
var valid = ajv.validate(schema, jsonResponse);
您不需要强制类型选项 关键字必须是:
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';
}
});
模式:
var ajv = new Ajv({
useDefaults: true,
coerceTypes: 'undefined'
});
const schema = {
"type": "object",
"properties": {
"Issue": {
"type": "object",
"properties": {
"StartDate": {
"type": "string"
"default": "N/A",
"stringTypeChecker"
}
}
}
}
}
{
"type": "object",
"properties": {
"Issue": {
"type": "object",
"properties": {
"StartDate": {
"type": "string",
"default": "N/A",
"stringTypeChecker": true
}
}
}
}
}
closing date的架构值是否是对
stringTypeChecker
的引用?换句话说,要使用stringTypeChecker
关键字,我需要如何更改模式?“stringTypeChecker”应该是任何值的模式属性之一(例如true
)stringTypeChecker
中的validate
方法包含四个参数,但是您没有在条件逻辑中使用dataPath
。这就是我调用stringTypeChecker
-->var validate=ajv.compile(JSON_模式)的方式代码>var valid=ajv.validate(responseJson,responseJson[“发行”],
“起始日期”)代码>在引擎盖下,我观察到验证方法需要所有四个参数。由于validate
不使用dataPath
,是否有办法更改validate函数中预期的参数量?感谢您准时回复。我不知道您为什么需要更改参数。这是有文档记录的api-请参阅自定义关键字文档。顺便说一句,您没有正确使用它,请参阅文档(入门)