【发布时间】:2019-07-18 13:07:18
【问题描述】:
我正在使用 "ajv": "^6.5.1" 进行 JSONSchema 验证。提到的 JSONSchema 对 adressInfo 字段具有递归引用,该字段是 required 字段。
我收到验证失败错误:
[{"keyword":"required","dataPath":".billing_address.adressInfo.adressInfo","schemaPath":"#/required","params":{"missingProperty":"street_address"}, “消息”:“应该 有必需的属性'street_address'"}]
我应该为这种类型的 JSONSchema 做什么,因为它在每个级别都需要 adressInfo。这是我的脚本:
var Ajv = require('ajv');
var addressJsonSchema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"address": {
"type": "object",
"properties": {
"street_address": {
"type": "string"
},
"city": {
"type": "string"
},
"adressInfo": {
"$ref": "#/definitions/address"
}
},
"required": ["street_address", "city", "adressInfo"]
}
},
"type": "object",
"properties": {
"billing_address": {
"$ref": "#/definitions/address"
}
}
}
var ajv = new Ajv({
schemaId: '$id',
meta: false,
});
var metaSchema = require('../node_modules/ajv/lib/refs/json-schema-draft-07.json');
ajv.addMetaSchema(metaSchema);
ajv._opts.defaultMeta = metaSchema.$id;
var inputData = {
"billing_address": {
"street_address": "Viman Nagar",
"city": "pune",
"adressInfo": {
"street_address": "Chandan Nagar",
"city": "pune",
"adressInfo": {}
}
}
}
try {
var validate = ajv.compile(addressJsonSchema);
var valid = validate(inputData);
if (!valid) {
console.log('Validation failed error:');
console.log(JSON.stringify(validate.errors));
} else {
console.log("successfully done validation");
}
} catch (e) {
console.log(e);
}
【问题讨论】:
-
从必填字段列表中删除
adressInfo。
标签: node-modules jsonschema ajv