Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将datetime.datetime对象序列化为JSON_Json_Python 2.7_Datetime_Object_Encode - Fatal编程技术网

将datetime.datetime对象序列化为JSON

将datetime.datetime对象序列化为JSON,json,python-2.7,datetime,object,encode,Json,Python 2.7,Datetime,Object,Encode,目前正在用python进行一个快速的小项目,我正在尝试将一个对象编码为JSON字符串。我以前做过几次,除了现在,没有任何问题。通常我只是做下面的事情 def ClassToEncode: 定义初始化(self,arg1,arg2,…,argn): self.attr1=arg1 self.attr2=arg2 ... self.attrn=argn ... def toJSON(self): 返回json.dumps(self,默认值=lambda o:o.。\uuuuu dict\uuuu)

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

def ClassToEncode:
定义初始化(self,arg1,arg2,…,argn):
self.attr1=arg1
self.attr2=arg2
...
self.attrn=argn
...
def toJSON(self):
返回json.dumps(self,默认值=lambda o:o.。\uuuuu dict\uuuu)
但问题是我的类属性之一是datetime.datetime对象,我被抛出以下错误

AttributeError: 'datetime.datetime' object has no attribute '__dict__'
是否有任何想法或总结可以实现将datetime属性包含到JSON输出中的功能

提前谢谢

您可以对datetime对象使用该方法将其转换为ISO-8601格式的时间字符串,然后将其序列化为JSON即可。在另一端,调用格式化字符串将其转换回
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)

另一种方法是修改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())

伟大的这正是我需要的。