JSON Schema对象验证问题(内部如何工作)?

时间:2018-01-23 08:42:24

标签: json jsonschema

背景 我在这里嘲笑我的问题以供参考: https://jsonschemalint.com/#/version/draft-06/markup/json?gist=4c185903d7aeb13f6977852a09cf5462

我正在使用这个npm包:https://www.npmjs.com/package/jsonschema

CODE

//i read in JSON specified in files (the contents of which are below) and parse them into JSON objects. This process works fine.

var jsonDef = JSON.parse(schemaFile); //i store this jsonDef in my database as an object
var jsonObj = JSON.parse(objFile);
var jsonv = new JSONValidator();

var validateResult = jsonv.validate(jsonObj, jsonDef); //jsonDef is read from my database
//validateResult.valid is true

问题: 我有一个通用模式+元数据定义,因此("props"包含我想验证的实际对象模式)

schemaFile:

{
    "name":"schoolDemo",
    "displayName":"School Demo",
    "propertiesKey":"assetId",
    "props":{       
        "assetId": {
            "type": "string"
        },
        "grade": {
            "type": "number"
        }
    }
}

OBJFILE:

{
    "assetId": "75255972",
    "grade": "A"    
}

但是,当我尝试验证以下用户输入对象时,它会成功。 不应该因为:

而失败

(1)初始元数据+架构定义中没有"properties"个元素?根据此处显示的示例,似乎需要此字段:https://www.npmjs.com/package/jsonschema

(2)type的{​​{1}}不是grade

我做错了什么?

1 个答案:

答案 0 :(得分:0)

验证正在通过,因为架构格式不正确(缺少“属性”)。

尝试此操作,然后验证将失败:

{
  "name": "schoolDemo",
  "displayName": "School Demo",
  "propertiesKey": "assetId",
  "properties": {
    "assetId": {
      "type": "string"
    },
    "grade": {
      "type": "number"
    }
  }
}