如何使用嵌套引用来validationJSON模式

我有一个引用多个模式的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的库来validation模式,但在编译模式时出现错误: can't resolve reference #/event.json from id

我怎样才能validation这样的JSON模式? 我的目标是为所有模式创build一个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# (最后加一个散列),至less可以作为参考,也可以是id参数。