Проверка схемы NodeJS JSON не работает

Я полный новичок в JSON Schema Validator, но я думаю, что это очень мощный инструмент. Однако я просто не могу проверить один JSON.

Это моя схема

 {
  title: "Example  Schema",
  type: "object",
  properties: {
    original_image:{
      type: "object",
      properties: {
        temp_id: {type: "string"},
        url: {type: "string"},
        scale:{
          type: "object",
          properties:{
            new_width: {type: "number"},
            new_height: {type: "number"}
          },
          required:["new_width","new_height"]
        }
      },
      required:["url","temp_id","scale"]
    }
  },
  required:["image"]
}

И это настоящий JSON:

{
  "original_image": {
    "temp_id": "this is my id",
    "scale": {
      "new_width": null,
      "new_height": 329
    }
  }
}

Итак, как вы можете видеть, свойства «url» из «original_image» там нет, но проверка возвращает true! И для "new_width" я установил значение null... и снова прошел проверку, так что я не знаю, что я делаю неправильно.


person Raul Nussbaum    schedule 04.10.2016    source источник


Ответы (2)


Кажется, он работает нормально. Консоль корректно регистрирует ошибки. Это мой index.js

var Validator = require('jsonschema').Validator;
var v = new Validator();
var instance = {
  "original_image": {
    "temp_id": "this is my id",
    "scale": {
      "new_width": null,
      "new_height": 329
    }
  }
};
var schema = {
  title: "Example  Schema",
  type: "object",
  properties: {
    original_image:{
      type: "object",
      properties: {
        temp_id: {type: "string"},
        url: {type: "string"},
        scale:{
          type: "object",
          properties:{
            new_width: {type: "number"},
            new_height: {type: "number"}
          },
          required:["new_width","new_height"]
        }
      },
      required:["url","temp_id","scale"]
    }
  },
  required:["image"]
};
console.log(v.validate(instance, schema));
person Divyanshu Maithani    schedule 04.10.2016
comment
Я использовал json-схему с тире, но jsonschema без нее работает хорошо. Так что, думаю, я переключусь на пакет jsonschema, это сработало! - person Raul Nussbaum; 04.10.2016

Если вы укажете свое условие как required:["url","temp_id","scale"] , тогда все три свойства необходимы в полезной нагрузке, но url, похоже, отсутствует в вашей полезной нагрузке. Если вы хотите, чтобы url было необязательным, не помещайте его в обязательное ограничение. Валидатор также возвращает сообщение об ошибке. Если это так, он возвращает отсутствующие параметры/свойства.

person basav    schedule 04.10.2016
comment
Нет, это именно проблема, я не хочу, чтобы URL-адрес был необязательным. Проблема в том, что даже будучи в required, он не возвращает и не выдает ошибку. Он должен, потому что его там нет, но он возвращает true, поэтому проверка неверна. - person Raul Nussbaum; 04.10.2016