我有一个引用多个模式的 JSON 架构,使用 '$ref' 参数,其架构反过来引用其他架构。
例如。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"allOf": [
{
"$ref": "xyz.json"
}
]
}
其中 schema xyz.json 是:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": { "type": "string", "title": "Identifier"},
"Xid": { "type": "object", "$ref": "pqr.json", "title": "X Identifier"}
}
}
只是为了 方便,我将它们全部放在一个目录中,并尝试使用名为 Ajv 的库验证架构,但在编译架构时出现错误:can't resolve reference #/event.json from id
.
如何验证此类 JSON 架构?我的目标是为所有模式创建一个 JavaScript 对象模型。谢谢。
我不知道 Ajv,但从查看文档来看,这似乎可以通过.addSchema
方法完成。添加像这样的所有部分模式(从节点fs.readFileSync
.js只是为了参数,在浏览器中它可以是一个XMLHttpRequest(:
var main = JSON.parse(fs.readFileSync('main.json'));
var xyz = JSON.parse(fs.readFileSync('xyz.json'));
var avj = new Avj(main);
avj.addSchema(xyz, 'xyz');
并使用您在第二个参数中设置的 id 从主架构引用它:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"allOf": [
{
"$ref": "xyz#"
}
]
}
如果您有多个分部架构,并且将 id 设置为属性,还可以将它们全部添加到数组中:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "xyz",
...
}
根据我对其他库(旧的 jayschema(的经验,您可能需要至少为引用编写xyz#
(末尾带有哈希(,也可能为 id 参数编写