Python json 错误xx is not JSON serializable解决办法
Pythonjson错误xxisnotJSONserializable解决办法
在使用json的时候经常会遇到xxx isnotJSONserializable,也就是无法序列化某些对象。经常使用django的同学知道django里面有个自带的Encoder来序列化时间等常用的对象。其实我们可以自己定定义对特定类型的对象的序列化,下面看下怎么定义和使用的。
#!/usr/bin/envpython
#-*-coding:utf-8-*-
#json_extention
#2014-03-16
#copyright:orangleliu
#license:BSD
'''''
python中dumps方法很好用,可以直接把我们的dict直接序列化为json对象
但是有的时候我们加了一些自定义的类就没法序列化了,这个时候需要
自定义一些序列化方法
参考:
http://docs.python.org/2.7/library/json.html
例如:
In[3]:fromdatetimeimportdatetime
In[4]:json_1={'num':1112,'date':datetime.now()}
In[5]:importjson
In[6]:json.dumps(json_1)
---------------------------------------------------------------------------
TypeErrorTraceback(mostrecentcalllast)
D:\devsofts\python2.7\lib\site-packages\django\core\management\commands\shell.py
cin()
---->1json.dumps(json_1)
TypeError:datetime.datetime(2014,3,16,13,47,37,353000)isnotJSONserial
izable
'''
fromdatetimeimportdatetime
importjson
classDateEncoder(json.JSONEncoder):
defdefault(self,obj):
ifisinstance(obj,datetime):
returnobj.__str__()
returnjson.JSONEncoder.default(self,obj)
json_1={'num':1112,'date':datetime.now()}
printjson.dumps(json_1,cls=DateEncoder)
'''''
输出结果:
PSD:\code\python\python_abc>python.\json_extention.py
{"date":"2014-03-1613:56:39.003000","num":1112}
'''
#我们自定义一个类试试
classUser(object):
def__init__(self,name):
self.name=name
classUserEncoder(json.JSONEncoder):
defdefault(self,obj):
ifisinstance(obj,User):
returnobj.name
returnjson.JSONEncoder.default(self,obj)
json_2={'user':User('orangle')}
printjson.dumps(json_2,cls=UserEncoder)
'''''
PSD:\code\python\python_abc>python.\json_extention.py
{"date":"2014-03-1614:01:46.738000","num":1112}
{"user":"orangle"}
'''
定义处理方法是继承json.JSONEncoder的一个子类,使用的时候是在dumps方法的cls函数中添加自定义的处理方法。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!