当前位置: 首页 > 知识库问答 >
问题:

序列化datetime。作为JSON的datetime对象

骆嘉石
2023-03-14

目前正在用python进行一个快速的小项目,我正在尝试将一个对象编码为JSON字符串。我以前做过几次,除了现在,没有任何问题。通常我只是做以下事情。

def ClassToEncode :
    def __init__(self, arg1, arg2, ..., argn) :
        self.attr1 = arg1
        self.attr2 = arg2
        ...
        self.attrn = argn

     ...
     def toJSON(self) :
         return json.dumps(self, default=lambda o: o.__dict__)

但问题是我的类属性之一是一个datetime.datetime对象,我被抛出以下错误

AttributeError: 'datetime.datetime' object has no attribute '__dict__'

是否有任何想法或总结可以启用将datetime属性包含到JSON输出中的功能??

提前感谢!

共有3个答案

陈欣荣
2023-03-14

虽然公认的答案很有效。如果您不需要任何日期格式,可以通过直接字符串转换快速完成。

所以像下面这样的方法应该行得通

str(datetime.datetime.now())

json。转储现在应该能够序列化此字符串

沃弘图
2023-03-14

另一种方法是修改toJSON()方法,以使用自定义字典来自定义数据:

import datetime

def ClassToEncode :
    def __init__(self, arg1, arg2, ..., argn) :
        self.attr1 = arg1
        self.attr2 = arg2
        ...
        self.attrn = datetime.datetime.utcnow()

     ...
     def customDict(self):
        dup = self.__dict__.copy()
        # configure dup to contain fields that you want to send
        dup['attrn'] = self.createdAt.isoformat() # datetime object
        del dup['attr2'] # Some private field you may want to hide
        return dup
     def toJSON(self):
        return json.dumps(self, default=lambda o: o.customDict())
东门仲卿
2023-03-14

可以对datetime对象使用isoformat()方法将其转换为ISO-8601格式的时间字符串,然后将其序列化为JSON。在另一端,调用datetime。日期时间。格式化字符串上的strtime(),将其转换回datetime对象:

>>> from datetime import datetime as dt
>>> now = dt.now()
>>> now
datetime.datetime(2014, 9, 4, 3, 19, 44, 214096)
>>> isonow = now.isoformat()
>>> isonow
'2014-09-04T03:19:44.214096'
>>> format = "%Y-%m-%dT%H:%M:%S.%f"
>>> newtime = dt.strptime(isonow, format)
>>> newtime
datetime.datetime(2014, 9, 4, 3, 19, 44, 214096)
 类似资料:
  • 问题内容: 我如何从JSON格式的Django的Mysql数据库中获取DateTimeField?我执行代码“ Date.time无法在json中序列化”时遇到错误(数据包含很多值): 但这是通过添加来解决的 但是现在我得到的’str’对象没有属性’_meta’。 问题答案: DjangoJSONEncoder解决了我的问题。

  • 我已经开始将一个项目从使用Java标准日期迁移到Joda DateTime。 我的项目使用XML序列化将对象保存到XML文件中。在这个特殊的例子中,我有一个Item类,它有一个DateTime属性。 在某个时候,我正在初始化对象,包括像这样的DateTime属性: 我使用XMLEncoder使用辅助类序列化项目: 显然,日期时间被保存在xml中。。。但毫无价值: 显然,它没有保存任何东西,但不,它

  • 问题内容: 在ASP.NET MVC Controller上使用Json()方法给我带来了麻烦-使用服务器时间,将此方法中引发的每个DateTime都转换为UTC。 现在,有没有一种简单的方法可以告诉ASP.NET MVC Json序列化器停止将DateTime自动转换为UTC?正如在此问题上所指出的那样,使用DateTime.SpecifyKind(date,DateTimeKind.Utc)重

  • 我有字符串值 是否有任何可用的函数或有效的方法将这个JSON字符串转换成Java DateTime对象,而不是一个接一个地读取字段并构建我的对象? 谢谢

  • 问题内容: 我已经使用Newtonsoft的JSON序列化器序列化了一个对象,而DateTime的实现方式是: 当我在其上$ .evalJSON()时,它是一个对象,但在它上找不到任何正常的Date方法,例如toUTCString。 有什么办法可以解决吗? 问题答案: 使用Json.NET附带的JsonConverters之一处理日期以获得更好的格式。JavaScriptDateTimeConve

  • 问题内容: 我有一个WebService返回DateTime字段。 我得到一个结果,但是 我想我怎么能做到这一点。 通过设置Header Content-Type:application / json; charset = utf-8; 我得到了类似的结果。 问题答案: 您可以更改您的WS以返回带有DateTime值的long。要返回的值是自Unix纪元(01/01/1970)以来的毫秒数。这可以