如何使用嵌套引用验证 JSON 模式
How to validate a JSON schema with nested references
我有一个引用多个模式的 JSON 模式,使用“$ref”参数,其模式又引用其他模式。
例如
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"allOf": [
{
"$ref": "xyz.json"
}
]
}
架构 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
方法来完成。添加所有这样的部分模式(node.js 中的 fs.readFileSync
只是为了论证,在浏览器中它可能是一个 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参数.
我有一个引用多个模式的 JSON 模式,使用“$ref”参数,其模式又引用其他模式。
例如
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"allOf": [
{
"$ref": "xyz.json"
}
]
}
架构 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
方法来完成。添加所有这样的部分模式(node.js 中的 fs.readFileSync
只是为了论证,在浏览器中它可能是一个 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参数.