使用AJV为Json Schema修改数据

时间:2018-06-15 12:51:40

标签: jsonschema json-schema-validator ajv

我在NodeJ上使用AJV(另一个Json模式验证器)。

我有以下架构

var schema = {
    "$id": "testSchema.json",
    "type": "object",
    "$schema": "http://json-schema.org/draft-06/schema#",
    "additionalProperties": false,
    "properties": {
        "userId": {
            "type": "integer"
        },
        "userName": {
            "type": "string"
        },
        "uniqueID": {
            "type": "integer"
        }
    }
}

我需要用一个我可能以某种方式传递给Json模式或AJV的值来覆盖unqiueID属性。 我认为以上可以使用AJV addKeyword方法完成,尝试使用它但失败了因为我不知道如何操纵(并返回)来自AJV自定义关键字的数据值。 可以用AJV修改数据吗?还是有其他可能的方法吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用可以执行任何数据操作的函数创建自定义关键字。

var Ajv = require('ajv');
var ajv = new Ajv({allErrors: true});

ajv.addKeyword('my_id_rewrite', {
  type: 'object',
  compile: function (sch, parentSchema) {
            return function (data) { 
                console.log(data)
                data['my_id']=parentSchema.my_id_rewrite;
                return true; 
            }
  }
});

var schema = { "my_id_rewrite": 2 };
var validate = ajv.compile(schema);
o = {"my_id":1}
console.log(validate(o)); // true
console.log(o); // Object {my_id: 2}

https://runkit.com/embed/cxg0vwqazre3