Python jsonschema 没有标记日期时间错误
Python jsonschema not flagging date-time errors
我在理解如何使用 jsonschema
验证数据时遇到了一些困难,这是在我开始尝试验证日期时间值时发现的。
下面的代码应该引发一个 ValidationError
异常,但它没有。这是我能想出的最短的例子。
def val(data, schema):
try:
jsonschema.validate(data, schema)
except jsonschema.ValidationError as e:
return e.args[0]
result = val('2008-09-0X22:47:31-07:00', {'format': 'date-time'})
print(result)
对于任何字符串值,结果都是 None
,尽管
val(42, {'type': 'string', 'format': 'date-time'})
引发异常“42 不是 'string' 类型”。如果我省略 'type'
模式项,并且验证器再次 returns None
.
,这 不会 发生
在我看来,我对如何使用这个包有一些根本性的误解。
As stated in the jsonschema documentation:
By default, no validation [of format
] is enforced, but optionally, validation can be enabled by hooking in a format-checking object into an IValidator
.
然后显示了如何执行此操作的示例:
validate(
"-12", {"format" : "hostname"}, format_checker=FormatChecker(),
)
所以你需要做的就是:
jsonschema.validate('2008-09-0X22:47:31-07:00', {'format': 'date-time'}, format_checker=jsonschema.FormatChecker())
请注意,如页面底部所述,仅当您还安装了 strict-rfc3339
软件包时才强制执行 date-time
格式。
我在理解如何使用 jsonschema
验证数据时遇到了一些困难,这是在我开始尝试验证日期时间值时发现的。
下面的代码应该引发一个 ValidationError
异常,但它没有。这是我能想出的最短的例子。
def val(data, schema):
try:
jsonschema.validate(data, schema)
except jsonschema.ValidationError as e:
return e.args[0]
result = val('2008-09-0X22:47:31-07:00', {'format': 'date-time'})
print(result)
对于任何字符串值,结果都是 None
,尽管
val(42, {'type': 'string', 'format': 'date-time'})
引发异常“42 不是 'string' 类型”。如果我省略 'type'
模式项,并且验证器再次 returns None
.
在我看来,我对如何使用这个包有一些根本性的误解。
As stated in the jsonschema documentation:
By default, no validation [of
format
] is enforced, but optionally, validation can be enabled by hooking in a format-checking object into anIValidator
.
然后显示了如何执行此操作的示例:
validate(
"-12", {"format" : "hostname"}, format_checker=FormatChecker(),
)
所以你需要做的就是:
jsonschema.validate('2008-09-0X22:47:31-07:00', {'format': 'date-time'}, format_checker=jsonschema.FormatChecker())
请注意,如页面底部所述,仅当您还安装了 strict-rfc3339
软件包时才强制执行 date-time
格式。