gpt4 book ai didi

javascript - 如何使用嵌套引用验证 JSON 模式

转载 作者:行者123 更新时间:2023-11-29 23:38:27 25 4
gpt4 key购买 nike

我有一个引用多个模式的 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 的库来验证模式但是在编译架构时出现错误:无法从 id 解析引用 #/event.json

我怎样才能验证这样的 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#"
}
]
}

如果你有多个部分模式,你也可以将它们全部添加到一个数组中,如果你将 ids 设置为属性:

{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "xyz",
...
}

根据我使用其他库(旧的 jayschema )的经验,您可能需要编写 xyz# (末尾带有哈希)至少用于引用,也许还用于 id参数。

关于javascript - 如何使用嵌套引用验证 JSON 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45844962/

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