Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJV自定义关键字验证_Javascript_Json_Validation_Jsonschema_Ajv - Fatal编程技术网

Javascript AJV自定义关键字验证

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

我正在使用AJV库验证我的JSON模式。我希望能够验证
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-请参阅自定义关键字文档。顺便说一句,您没有正确使用它,请参阅文档(入门)