AJV - 引用外部模式而不先添加它
Posted
技术标签:
【中文标题】AJV - 引用外部模式而不先添加它【英文标题】:AJV - Reference external schema without adding it first 【发布时间】:2021-03-06 23:11:37 【问题描述】:是否可以使用 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
。
【问题讨论】:
【参考方案1】:给定
answer.json
"$id": "***://schemas/answer.json",
"type": "object",
"properties":
"id":
"$ref": "id.json#"
id.json
"$id": "***://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('***://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 === '***://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();
【讨论】:
以上是关于AJV - 引用外部模式而不先添加它的主要内容,如果未能解决你的问题,请参考以下文章
让 JComboBox 在 JTable 中显示而不先单击它