【发布时间】:2019-11-13 01:24:37
【问题描述】:
我想加载(需要)一个包含基于其文件的引用的 json 模式的文件夹。
换句话说,我有
Schema1:
{ //Schema stuff ....
"$ref": "./json_schema2_file.json#someElement"
}
在同一文件夹中的另一个文件中:
Schema2
{//Schema stuff...
"$id": "/someElement"
}
这些 Schema 位于单独的文件中,现在应该加载到 JS 中以针对 json 对象进行验证。 但是,文件夹内的引用应该仍然有效。
这就是为什么我的问题是,是否以及如何加载一个充满 json 文件的文件夹而不引用中断。
这些模式将被此库用于验证 json 对象:https://github.com/tdegrunt/jsonschema 我个人将 Node 与 Angular 一起使用,因此使用 fs 仅适用于节点,但这只是一个开始。
【问题讨论】:
-
您的参考资料不太正确。我现在无法形成完整的答案,但请查看库文档以了解如何在github.com/tdegrunt/… 上执行此操作
-
您是指在 tdgrunt 库中的引用还是对 json 模式的引用?因为我创建了一个包含 json 模式的文件夹,其中引用应该是正确的,但是如果我没看错的话,tdgrunt 库有不同的引用方式。
-
您为给定的 $ids 编写了错误的 JSON 架构引用。 JSON Schema 本身不知道单个文件或文件系统本身,而是使用 URI 解析协议。想象你的 $ref 是一个 HTML 链接 href,它只知道它所在页面的当前 URL。这有帮助吗?
-
我跟着这个:swagger.io/docs/specification/using-ref 不过也许我必须再放一个点。 Webstorm 找到了它,所以我认为它是正确的。我用 ./ ../ 和没有 / 进行了测试
-
呃,这就解释了为什么我们会看到这么多问题。如果 $id 反映了可访问的 URL,并且所有模式都在所述 URL 和相对路径中提供,并且您使用的库支持(通常带有标志)远程 http 解析,则相对位置仅适用于自动远程引用。
标签: node.js json angular jsonschema