Проверка схемы Json не показывает ошибок

Я использую Ajv версии 6.10.2 для проверки простой схемы Json, разделенной на два файла, но дело в том, что я не получаю ошибок при выполнении проверки, даже если json, который я использую для тестирования, неверен.

Это две части схемы:

root.json

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://test.com/schemas/root.json",
  "title": "test",
  "description": "test",
  "type": "object",
  "properties": {
    "entrypoint": { "$ref": "entrypoint.json" }
  },
  "additionalProperties": false,
  "required": ["entrypoint"]
}

точка входа.json

{
  "$id": "http://test.com/schemas/entrypoint.json",
  "description": "test object",
  "type": "string"
}

Я создаю экземпляр Ajv следующим образом

import Ajv from 'ajv';
import root from './root.json';
import entrypoint from './entrypoint.json';

const ajv = new Ajv({
  allErrors: true,
  schemas: [
   test,
   entrypoint,
  ],
});

Это проверочный вызов

const validate = ajv.getSchema('http://test.com/schemas/root.json');

И это json, используемый для проверки схемы

{
    entrypoint: '',
    incorrect: {}
}

Он выходит как недействительный, но ошибок не показывает, я долго просматривал его, но не нашел причину.

заранее спасибо


person codenoob    schedule 29.10.2019    source источник
comment
Похоже, вы загружаете файл, который тестируете, как объект схемы.   -  person Kieveli    schedule 29.10.2019
comment
Как бы вы это сделали?   -  person codenoob    schedule 29.10.2019
comment
Схема определяет, как должен выглядеть JSON — аналогично «точке входа». Затем вы проверяете свой test.json на точку входа. Удалить тест из списка схем.   -  person Kieveli    schedule 30.10.2019
comment
Думаю, я вас запутал, test.json — это корень схемы, а не тестовый объект, пример поправлю.   -  person codenoob    schedule 30.10.2019
comment
Я отредактировал пример, чтобы отразить то, что я имел в виду. @Киевели   -  person codenoob    schedule 30.10.2019
comment
Вам нужно добавить схему entrypoint.json в экземпляр Ajv. Через addSchema IIRC   -  person customcommander    schedule 30.10.2019
comment
@customcommander, но я делаю это при создании экземпляра Avj со схемами   -  person codenoob    schedule 30.10.2019
comment
Вы правильно добавили схемы, но я не вижу в вашем коде, где вы загрузили схемы в переменные test и entrypoint. Пожалуйста, обновите свой вопрос, чтобы включить весь соответствующий код.   -  person Relequestual    schedule 30.10.2019
comment
Я также рекомендую прочитать stackoverflow.com/help/minimal-reproducible-example. В настоящее время я не могу воспроизвести вашу проблему, потому что вы не включили весь код. Подумайте о том, чтобы предоставить больше кода И jsfiddle / jsbin, показывающий проблему.   -  person Relequestual    schedule 30.10.2019


Ответы (1)


Ваша проблема в том, что у вас нет схемы с $id http://test.com/schemas/test.json. Вам нужно передать идентификатор (в вашем случае полный URI) схемы, которую вы хотите использовать для проверки, в getSchema.

Я вижу, вы скопировали из документации URI, показанный в качестве примера.

person Relequestual    schedule 30.10.2019
comment
Это предполагает, что вы правильно импортировали JSON. Я добавил комментарий к вашему вопросу. - person Relequestual; 30.10.2019