【问题标题】:Parse date/time strings to datetimes using JSON Schema使用 JSON Schema 将日期/时间字符串解析为日期时间
【发布时间】: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


【解决方案1】:

您可以使用Marshmallow 等序列化库来验证、序列化和反序列化您的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多