Валидатор AJV всегда возвращает истинное значение - PullRequest
0 голосов
/ 03 января 2019

Мне нужно проверить файлы JSON следующим образом:

const setupSchema = fs.readFileSync(schemaDir +'/setup.json');

и компилировать:

const setupValidator = ajv.compile(setupSchema);

Моя проблема заключается в том, что строка:

console.log( setupValidator('') );

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

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Из краткого руководства: (http://json -schema.org / )

При проверке или описании документа JSON мы вызываем экземпляр, и документ, содержащийописание называется схемой.

Самая базовая схема - это пустой объект JSON, который ничего не ограничивает, ничего не разрешает и ничего не описывает:

{}

YouМожно применить ограничения к экземпляру, добавив в схему ключевые слова проверки.Например, ключевое слово «type» может использоваться для ограничения экземпляра объектом, массивом, строкой, числом, логическим значением или нулем:

{ "type": "string" }

Это означает, чточто если ваша схема является либо пустым объектом, либо не использует словарь JSON Schema, функция Ajv compile всегда будет генерировать функцию проверки, которая всегда проходит:

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

var schema = {
    foo: 'bar',
    bar: 'baz',
    baz: 'baz'
};

var validate = ajv.compile(schema);

validate({answer: 42}); //=> true
validate('42'); //=> true
validate(42); //=> true

Возможно, ваш setup.json либо неверензагружен или не является схемой согласно спецификации схемы JSON.

0 голосов
/ 03 января 2019
// You should specify encoding while reading the file otherwise it will return raw buffer
const setupSchema = fs.readFileSync(schemaDir +'/setup.json', "utf-8");
// setupSchema is a JSON string, so you need to parse it before passing it to compile as compile function accepts an object
const setupValidator = ajv.compile(JSON.parse(setupSchema));
console.log( setupValidator('') ) // Now, this will return false;

Вместо этого вы можете просто запросить файл json, используя require.

const setupSchema = require(schemaDir +'/setup.json');
const setupValidator = ajv.compile(setupSchema);
console.log( setupValidator('') );
...