Python 如何验证JSON模式文件的有效性?

Python 如何验证JSON模式文件的有效性?,python,json,jsonschema,python-jsonschema,Python,Json,Jsonschema,Python Jsonschema,我有一个类似这样的文件,其中包含几个故意的bug: { "$schema": "http://json-schema.org/schema#", "type": "object", "description": "MWE for JSON Schema Validation", "properties": { "valid_prop": { "type": ["string", "number"], "descripti

我有一个类似这样的文件,其中包含几个故意的bug:

{
    "$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来查找这些bug

我看到了,这建议针对我的用例执行以下修改:

导入json 从jsonschema导入Draft4Validator 以打开的“./my schema.json”作为schemaf: schema=json.load'\n'.joinschemaf.readlines Draft4Validator.check_schemay_schema 打印OK!在无效的模式上,我们不在这里 但是上面的脚本没有检测到模式文件中的任何一个错误。我会怀疑它至少检测到type:属性中的额外冒号


我用错图书馆了吗?如何编写检测此错误的验证脚本?

您说模式无效,但您提供的示例并非如此

忽略未知关键字。这是为了允许创建扩展。如果未知关键字被阻止,我们就不会有各种人和团体创建的扩展生态系统,比如表单生成

您说required中的值是对不存在的属性的引用。所需关键字没有指向properties关键字的链接

required确定对象必须具有哪些键

属性确定子模式应如何应用于对象中的值

属性中也不需要包含required中的值。事实上,在构建复杂的模块化模式时,它们通常不这样做

在验证模式是否有效方面,可以使用JSON模式元模式

在检查你认为不可确定的额外事物方面,这取决于你,因为你提供的例子是有效的。


有些库可能会提供健全性检查,但这不太可能从您提供的示例中得到,因为它们不是错误

难道不能用JSONschema来描述JSONschema吗?我想知道他们是否在规范中的某个地方这样做了。在四处查看时找不到它,但如果它存在,我也不会感到惊讶……仅供参考,schema=json.loadschemaf是一种更简洁的加载文件的方法。甚至schema=json.loadsschemaf.read也比逐行阅读更好,只是为了再次连接它们。readlines还会在每一行中保留换行符,因此与\n的连接会创建双倍行距的结果。但是,由于JSON架构不能包含任意代码,因此在无法表示的数据元素之间的关系上存在某些限制。因此,对于足够复杂的数据格式,任何“验证工具”都可能有两个验证阶段:一个在模式或结构级别,另一个在语义级别。后一种检查可能需要使用更通用的编程语言来实现。-所以,是和否。尽管可以捕获类型:之类的错误。