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函数中添加自定义的处理方法。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!