如何使用嵌套引用验证 JSON 架构



我有一个引用多个模式的 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 参数编写

最新更新