gpt4 book ai didi

javascript - AJV - 引用外部模式而不先添加它

转载 作者:行者123 更新时间:2023-12-04 13:31:05 27 4
gpt4 key购买 nike

是否可以使用 AJV 来引用以前未通过 addSchema() 添加的模式? ?
我想解决这样的引用:

{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"$ref": "project-id.schema.json#/definitions/id"
}
}
}
没有明确添加 project-id.schema.json第一的。

最佳答案

给定
答案.json

{
"$id": "stackoverflow://schemas/answer.json",
"type": "object",
"properties": {
"id": {
"$ref": "id.json#"
}
}
}
id.json
{
"$id": "stackoverflow://schemas/id.json",
"type": "string"
}
通过 schemas 一次性添加所有模式选项
const Ajv = require('ajv');
const ajv = new Ajv({
schemas: [
require('./id.json'),
require('./answer.json')
]
});

const validate = ajv.getSchema('stackoverflow://schemas/answer.json');

validate(42);
//=> false
validate({id: 42});
//=> false
validate({id: '🌯'});
//=> true
使用 loadSchema 加载引用的模式选项
在这种情况下,您确实需要将要编译的模式作为对象传递,但如果该模式包含对 Ajv 未知的其他模式的引用,这些将通过 loadSchema 加载。 :
const Ajv = require('ajv');
const ajv = new Ajv({
loadSchema: function (uri) {
return new Promise((resolve, reject) => {
if (uri === 'stackoverflow://schemas/id.json') {
resolve(require('./id.json')); // replace with http request for example
} else {
console.log('wat')
reject(new Error(`could not locate ${uri}`));
}
});
}
});

const test = async () => {
// Schemas referenced in answer.json will be loaded by the loadSchema function
const validate = await ajv.compileAsync(require('./answer.json'));
validate(42) //=> false
validate({id: 42}) //=> false
validate({id: '🌯'}) //=> true
}

test();

关于javascript - AJV - 引用外部模式而不先添加它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64981939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com