dus*_*ual 52 python serialization json simplejson
为什么json序列化不适用于datetime对象.据我了解json序列化,任何对象的基本思想都可以调用 __str__内置函数,然后将你获得的对象作为响应进行urlencode.但是在datetime的情况下,我得到以下错误
TypeError: datetime.datetime(2012, 5, 23, 18, 38, 23, 37566) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
虽然有__str__一种方法可以对已经可用的物体进行字符串化,但似乎有意识地决定不这样做,为什么会出现这种情况呢?
Vik*_*kas 90
不,它在json模块中不起作用.该模块为您提供默认编码器:json.JSONEncoder.您需要扩展它以提供default序列化对象的方法实现.像这样的东西:
import json
import datetime
from time import mktime
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return int(mktime(obj.timetuple()))
return json.JSONEncoder.default(self, obj)
print json.dumps(obj, cls=MyEncoder)
Run Code Online (Sandbox Code Playgroud)
正如其他人正确指出的那样,原因是json的标准没有规定如何表示日期时间.
Mar*_*ers 10
您希望它们如何序列化?
JSON没有指定如何处理日期,因此python json库无法决定如何为您表示这些日期.这完全取决于另一方(浏览器,脚本,等等)如何处理JSON中的日期.
修补json模块的简单方法,使序列化支持日期时间.
import json
import datetime
json.JSONEncoder.default = lambda self,obj: (obj.isoformat() if isinstance(obj, datetime.datetime) else None)
Run Code Online (Sandbox Code Playgroud)
比你经常使用json序列化 - 这次将datetime序列化为isoformat.
json.dumps({'created':datetime.datetime.now()})
Run Code Online (Sandbox Code Playgroud)
导致:'{"created":"2015-08-26T14:21:31.853855"}'
请参阅更多详细信息和注意事项: StackOverflow:Python和JavaScript之间的JSON日期时间
| 归档时间: |
|
| 查看次数: |
33725 次 |
| 最近记录: |