如何使用嵌套引用来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参数。