目前在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输出中的功能的想法或包装?
提前致谢!
答案 0 :(得分:2)
您可以在datetime对象上使用isoformat()
方法将其转换为ISO-8601格式的时间字符串,然后将其序列化为JSON就好了。另一方面,在格式化字符串上调用datetime.datetime.strptime()
将其转换回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)
答案 1 :(得分:0)
另一种方法是修改您的 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())