gpt4 book ai didi

python - 我可以在 Pydantic 中创建一个自动转换为日期时间的 Unix 时间类型吗?

转载 作者:行者123 更新时间:2023-12-04 15:10:52 26 4
gpt4 key购买 nike

我收到一个带有 unix 时间戳的 JSON 响应,例如:

{"protocol": "http", "isPublic": false, "startTime": 1607586354631}
使用 Pydantic 读取这些数据的最简单方法是注释 startTimeint .我想将其注释为 UnixMicrotime或类似的,以便 Pydantic 也将其解析为日期时间(并在序列化时将日期时间转换回 UnixMicrotime)。那可能吗?
最小的例子
import json
from pydantic import BaseModel


class Data(BaseModel):
protocol: str
isPublic: bool
startTime: int


json_str = """{"protocol": "http", "isPublic": false, "startTime": 1607586354631}"""
data_dict = json.loads(json_str)
data = Data.parse_obj(data_dict)
print(data)
protocol='http' isPublic=False startTime=1607586354631
但我希望它是:
protocol='http' isPublic=False startTime=2020-12-10T08:45:54

最佳答案

您可以将其注释为 datetime解析它,并添加 custom json_encoder 用于序列化 datetime作为unix时间。样本:

import json
from datetime import datetime

from pydantic import BaseModel

json_str = """{"protocol": "http", "isPublic": false, "startTime": 1607586354631}"""
data_dict = json.loads(json_str)


class Data(BaseModel):
protocol: str
isPublic: bool
startTime: datetime


data = Data.parse_obj(data_dict)
print(data.json())


class DataWithUnixTime(BaseModel):
protocol: str
isPublic: bool
startTime: datetime

class Config:
json_encoders = {
datetime: lambda v: v.timestamp(),
}


data = DataWithUnixTime.parse_obj(data_dict)
print(data.json())
{"protocol": "http", "isPublic": false, "startTime": "2020-12-10T07:45:54.631000+00:00"}
{"protocol": "http", "isPublic": false, "startTime": 1607586354.631}

关于python - 我可以在 Pydantic 中创建一个自动转换为日期时间的 Unix 时间类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65230604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com