【发布时间】:2017-04-03 17:10:02
【问题描述】:
我可以使用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 文档的大型项目,这些文档可能非常大并且有很多嵌套级别,所以这不像简单地自己查找密钥并在对象验证后处理它们那么简单。
【问题讨论】:
-
我将把它记下来,因为它可能是重复的。 stackoverflow.com/questions/127803/… 是一个非常好的页面,它告诉您如何从字符串中解析日期时间。在您的情况下,只需将验证和解析分开。毕竟,它们是两个独立的任务。
-
您希望
'not a date'转换成什么日期? -
只是为了清楚我想要的是将 JSON 模式和 JSON blob 传递给某个函数并对其进行验证并且将日期/时间转换为
datetime.date/datetime.datetime基于该架构的对象
标签: python parsing datetime jsonschema