我可以使用jsonschema
指定值是我的JSON对象中的有效日期,如下所示:
import jsonschema
schema = {'type': 'object', 'properties': {'dt': {'type': 'string', 'format': 'date'}}}
# fine
jsonschema.validate({'dt': '2017-01-01'}, schema, format_checker=jsonschema.FormatChecker())
# jsonschema.exceptions.ValidationError: 'not a date' is not a 'date'
jsonschema.validate({'dt': 'not a date'}, schema, format_checker=jsonschema.FormatChecker())
但是,这会使dt
的值保持不变,仍然是一个字符串。我需要将日期/时间转换为datetime.date
/ datetime.datetime
个实例,有没有办法在给定JSON模式(使用jsonschema
或任何其他库的情况下自动执行此操作?
理想情况下,我想要这样的事情:
import somelibrary
schema = {'type': 'object', 'properties': {'dt': {'type': 'string', 'format': 'date'}}
out = somelibrary.validate_and_parse({'dt': '2017-01-01'}, schema)
assert out == {'dt': datetime.date(2017, 1, 1)}
somelibrary.validate_and_parse({'dt': 'not a date'}, schema) # SomeError
我有一个包含许多JSON文档的大型项目,这些文档可能非常大并且具有很多级别的嵌套,因此它不像单独查找键并在对象验证后处理它们那么容易。