使用python的json模块序列化时间或者其他不支持的类型时会抛异常,例如下面的代码:
1
2
3
4
5
6
7
8
|
# -*- coding: cp936 -*- import json if __name__ = = '__main__' : now = datetime.now() json.dumps({ 'now' :now}) |
运行会出现下面的错误信息:
1
2
3
4
5
6
7
8
9
10
11
12
|
Traceback (most recent call last): File "C:\Users\xx\Desktop\t.py" , line 8 , in <module> json.dumps({ 'now' :now}) File "C:\Python27\lib\json\__init__.py" , line 231 , in dumps return _default_encoder.encode(obj) File "C:\Python27\lib\json\encoder.py" , line 201 , in encode chunks = self .iterencode(o, _one_shot = True ) File "C:\Python27\lib\json\encoder.py" , line 264 , in iterencode return _iterencode(o, 0 ) File "C:\Python27\lib\json\encoder.py" , line 178 , in default raise TypeError( repr (o) + " is not JSON serializable" ) TypeError: datetime.datetime( 2012 , 12 , 26 , 11 , 51 , 33 , 409000 ) is not JSON serializable |
意思是说datetime类不支持Json序列化
我们需要对json做下扩展,让它可以支持datetime类型。
1
2
3
4
5
6
7
8
|
class ComplexEncoder(json.JSONEncoder): def default( self , obj): if isinstance (obj, datetime): return obj.strftime( '%Y-%m-%d %H:%M:%S' ) elif isinstance (obj, date): return obj.strftime( '%Y-%m-%d' ) else : return json.JSONEncoder.default( self , obj) |
在调用json.dumps时需要指定cls参数为ComplexEncoder
例如:
1
|
json.dumps({ 'now' :now}, cls = ComplexEncoder) |
总结
以上就是本文关于python使用json序列化datetime类型实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:http://blog.csdn.net/junli_chen/article/details/78133003