python - 使用 pydantic json_decoders 解析不同的时间格式无法按预期工作
问题描述
有人可以向我解释以下 pydantic 模型的行为。
from datetime import datetime
from pydantic import BaseModel
first_format = {'time': '2018-01-05T16:59:33+00:00',}
second_format = {'time': '2021-03-05T08:21:00.000Z',}
class TimeModel(BaseModel):
time: datetime
class Config:
json_encoders = {
datetime: lambda v: v.isoformat(),
}
json_decoders = {
datetime: lambda v: datetime.fromisoformat(v),
}
print(TimeModel.parse_obj(first_format))
print("first_format successfull")
print(TimeModel.parse_obj(second_format))
print("second_format successfull")
输出:
time=datetime.datetime(2018, 1, 5, 16, 59, 33, tzinfo=datetime.timezone.utc)
first_format successfull
time=datetime.datetime(2021, 3, 5, 8, 21, tzinfo=datetime.timezone.utc)
second_format successfull
预期行为:
first_format
像现在一样工作,但second_format
由于datetime.fromisoformat(second_format)
错误格式引发错误而失败
我想做的事:
仅当格式为 时才解析时间first_format
,否则引发异常。
谢谢你的帮助
编辑:我后来意识到没有这样的东西json_decoders
,所以请不要对此感到困惑
问题已解决
解决方案
您需要在pre
validator
此处使用,以解析和验证传入的日期时间字符串:
from datetime import datetime
from pydantic import BaseModel, validator
first_format = {'time': '2018-01-05T16:59:33+00:00',}
second_format = {'time': '2021-03-05T08:21:00.000Z',}
class TimeModel(BaseModel):
time: datetime
class Config:
json_encoders = {
datetime: lambda v: v.isoformat(),
}
@validator('time', pre=True)
def time_validate(cls, v):
return datetime.fromisoformat(v)
print(TimeModel.parse_obj(first_format).json())
print("first_format successfull")
print(TimeModel.parse_obj(second_format))
print("second_format successfull")
推荐阅读
- java - Heroku - Java Maven 项目解聚 - 完成 git push heroku master 后出现应用程序错误
- jquery - 带有复选框的多选选项使用jquery选择和取消选择选项
- android - JSONException while using last.fm API in android
- android - Fresco:如何在下载前获取图像纵横比?
- sql-server - 如何在没有 Management Studio 的情况下在 MSSQL 中创建存储过程?
- azure - 限制同时运行的 azure 函数的数量
- javascript - Angular 6绑定树对象与html元素
- php - 在 Heroku 连接到 RDS MySQL 时出现连接超时错误
- sql-server - SQL 根据唯一值更新
- excel - 在公式中重复相同的函数会增加计算时间吗?