Я использую "ajv": "^ 6.5.1" для проверки JSONSchema.Упомянутая JSONSchema имеет рекурсивную ссылку для поля adressInfo , которое является обязательным полем .
Я получаю ошибку проверки:
[{"ключевое слово": "обязательно", "dataPath": ". Billing_address.adressInfo.adressInfo", "schemaPath": "# / required "," params ": {" missingProperty ":" street_address "}," message ":" должно иметь обязательное свойство '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);
}