我的团队构建了一个API,其中所有输入和输出都使用JSON Schema来验证数据,项目正在增长,昨天我发现我们已经有85个JSON文件,并且每个文件都有一个JSON模式来验证某些东西,I还检测到我在每个文件上都有很多重构,例如,应该提取许多重复的代码并将其作为单个模式放置,并在每个文件上引用此模式。所以我试着把它谷歌一个库来扫描这个目录,并帮我检测这种错误,还有一个JSON模式linter,帮助我检测其他错误,但我找不到任何东西。所以我发布这个问题,以确定是否有人遇到同样的问题,并找到了解决问题的工具。
答案 0 :(得分:1)
对于我正在进行的项目,我们正在使用tv4来验证JSON Schema文件,而不是'linting'本身,但应该是你正在寻找的。 p>
答案 1 :(得分:1)
我之前从未使用过这个库,但这里有一个你可以做的例子。图书馆本身并不是这里的重要部分。
下载http://json-schema.org/draft-04/schema并将其另存为draft04-metaschema.json
(或您为模式使用的任何元架构)。使用npm:{/ p>中的ajv-cli
npm install -g ajv-cli
ajv validate -s draft04-metaschema.json -d your-schema.json
这将根据指定的metaschema验证您的架构,以确保它有效。您可以使用相同的方法来使用您希望的任何其他库来验证您的模式。希望这足以让你开始。
答案 2 :(得分:0)
我还必须找到一种验证模式的方法。 ajv validate -s draft06-metaschema.json -d your-schema.json
仅检查基本内容(例如,它不检查$ref
的值和正则表达式)。 ajv compile -s your-schema.json
检查更多内容并显示错误消息(例如error: Invalid regular expression: /^(\d|[12]\d|3[01]$/: Unterminated group
)。
因此,我使用以下脚本(validate_schema.sh
):
#!/bin/bash
set -ex
[ $# = 3 ]
url_draft=$1
json_draft=$2
json_target=$3
jq -e '.["$schema"]=="'"$url_draft"'"' "$json_target"
# False positives are possible though:
ajv validate -s "$json_draft" -d "$json_target"
ajv compile -s "$json_target"
答案 3 :(得分:0)
https://www.json-schema-linter.com/上有一个JSON模式linter,它也有一个 WebAPI 。它捕获了JSON模式文件中的一些常见错误。