如何验证 JSON 模式文件的有效性?
How do I verify the validity of a JSON Schema file?
我有一个像这样的 JSON Schema 文件,其中包含一些故意的错误:
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"description": "MWE for JSON Schema Validation",
"properties": {
"valid_prop": {
"type": ["string", "number"],
"description": "This can be either a string or a number."
},
"invalid_prop": {
// NOTE: "type:" here should have been "type" (without the colon)
"type:": ["string", "null"],
"description": "Note the extra colon in the name of the type property above"
}
},
// NOTE: Reference to a non-existent property
"required": ["valid_prop", "nonexistent_prop"]
}
我想编写一个 Python 脚本(或者更好的是,安装带有 PiP 的 CLI)来查找这些错误。
我看过 this answer,它建议执行以下操作(针对我的用例进行了修改):
import json
from jsonschema import Draft4Validator
with open('./my-schema.json') as schemaf:
schema = json.loads('\n'.join(schemaf.readlines()))
Draft4Validator.check_schema(my_schema)
print("OK!") # on invalid schema we don't get here
但是上面的脚本没有检测到架构文件中的任何错误。我会怀疑它检测到 至少 "type:"
属性.
中的额外冒号
我是否错误地使用了库?如何编写检测此错误的验证脚本?
您说架构无效,但您提供的示例并非如此。
忽略未知关键字。这是为了允许创建扩展。如果阻止未知关键字,我们就不会有各种人和团体创建的扩展生态系统,例如表单生成。
你说required
中的值是一个"Reference to a non-existent property"。 required
关键字没有link到properties
关键字。
required
确定对象必须具有哪些键。
properties
确定应如何将子模式应用于对象中的值。
required
中的值不需要也包含在 properties
中。事实上,在构建复杂的模块化架构时,他们通常不这样做。
就验证架构是否有效而言,您可以使用 JSON 架构元架构。
关于检查您认为不需要的其他内容,这取决于您,因为您提供的示例是有效的。
有些库可能会提供健全性检查,但您提供的示例不太可能被采纳,因为它们不是错误。
我有一个像这样的 JSON Schema 文件,其中包含一些故意的错误:
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"description": "MWE for JSON Schema Validation",
"properties": {
"valid_prop": {
"type": ["string", "number"],
"description": "This can be either a string or a number."
},
"invalid_prop": {
// NOTE: "type:" here should have been "type" (without the colon)
"type:": ["string", "null"],
"description": "Note the extra colon in the name of the type property above"
}
},
// NOTE: Reference to a non-existent property
"required": ["valid_prop", "nonexistent_prop"]
}
我想编写一个 Python 脚本(或者更好的是,安装带有 PiP 的 CLI)来查找这些错误。
我看过 this answer,它建议执行以下操作(针对我的用例进行了修改):
import json
from jsonschema import Draft4Validator
with open('./my-schema.json') as schemaf:
schema = json.loads('\n'.join(schemaf.readlines()))
Draft4Validator.check_schema(my_schema)
print("OK!") # on invalid schema we don't get here
但是上面的脚本没有检测到架构文件中的任何错误。我会怀疑它检测到 至少 "type:"
属性.
我是否错误地使用了库?如何编写检测此错误的验证脚本?
您说架构无效,但您提供的示例并非如此。
忽略未知关键字。这是为了允许创建扩展。如果阻止未知关键字,我们就不会有各种人和团体创建的扩展生态系统,例如表单生成。
你说required
中的值是一个"Reference to a non-existent property"。 required
关键字没有link到properties
关键字。
required
确定对象必须具有哪些键。
properties
确定应如何将子模式应用于对象中的值。
required
中的值不需要也包含在 properties
中。事实上,在构建复杂的模块化架构时,他们通常不这样做。
就验证架构是否有效而言,您可以使用 JSON 架构元架构。
关于检查您认为不需要的其他内容,这取决于您,因为您提供的示例是有效的。
有些库可能会提供健全性检查,但您提供的示例不太可能被采纳,因为它们不是错误。