Изменить данные с помощью AJV для схемы Json

Я использую AJV (другой валидатор схемы Json) на NodeJs.

у меня следующая схема

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"
        }
    }
}

Мне нужно перезаписать свойство unqiueID значением, которое я мог бы как-то передать в схему Json или AJV. Я думаю, что вышеизложенное можно сделать с помощью метода AJV addKeyword, пытался использовать его, но не удалось, потому что я не знаю, как манипулировать (и возвращать) значение данных из пользовательских ключевых слов AJV. Можно ли изменить данные с помощью AJV? или есть другие возможные способы сделать это?? Благодарю вас!


person Kshateesh    schedule 15.06.2018    source источник


Ответы (1)


Вы можете создать пользовательское ключевое слово с функцией, которая будет делать с данными все, что вы хотите.

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

person vearutop    schedule 17.06.2018
comment
Это не работает. - person bertonc96; 29.01.2021
comment
@bertonc96 — см. также github.com/ajv-validator/ajv/issues. /141#issuecomment-270692820 — пост автора ajv о принудительной/перезаписи данных. (Кстати, приведенный выше фрагмент работает в песочнице, на которую автор статьи дал ссылку.) - person Craig Hicks; 04.02.2021
comment
@bertonc96 — А это: github.com/ajv-validator/ajv/ вопросы/399#issuecomment-275566352 - person Craig Hicks; 04.02.2021