我有一个引用多个模式的JSON模式,使用'$ ref'参数,其模式反过来引用其他模式。
例如。
<display:table ....>
<display:column ...>
${foo.value}
</display:column>
</display:table>
schema xyz.json是:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"allOf": [
{
"$ref": "xyz.json"
}
]
}
只是为了
方便,我把它们全部放在一个目录中,并尝试使用名为Ajv的库来验证模式,但在编译模式时我收到错误:
{
"$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"}
}
}
。
我怎样才能验证这样的JSON模式?我的目标是为所有模式创建单个JavaScript对象模型。感谢。
答案 0 :(得分:1)
我不知道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参数。