python 序列化成json 乱码问题的解决
By:Roy.LiuLast updated:2014-03-06
今天又网友问到, 在python 下将一个对象序列化成 json 时经常会报乱码, 甚至会报错, 的确会出现这种情况,因为在python 中默认使用的是 simplejson 库。但其实是可以通过配置选项解决的, 下面是我写的一个公共的转换对象到json与从json 转换到对象的公共类:
在使用的时候,你可以这样使用:
这里的 retobj 是一个 python 字典dict 对象. 采用这种方式,就可以避免报错和乱码了,其实很重要的一点大家可以发现就是这里: jsonstr=json.dumps(obj,default=self.__default,ensure_ascii=False), ensure_ascee=False.
# -*- coding=utf-8 -*- import json from datetime import date, datetime import decimal class DecimalEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, decimal.Decimal): return float(o) return super(DecimalEncoder, self).default(o) class JsonUtil: 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: raise TypeError('%r is not JSON serializable' % obj) def parseJsonObj(self,obj): jsonstr=json.dumps(obj,default=self.__default,ensure_ascii=False) #cls=DecimalEncoder return jsonstr def parseJsonString(self,jsonstring): obj=json.loads(jsonstring) return obj if __name__ == '__main__': pass
在使用的时候,你可以这样使用:
jsonUtil=JsonUtil() retstr=jsonUtil.parseJsonObj(retobj)
这里的 retobj 是一个 python 字典dict 对象. 采用这种方式,就可以避免报错和乱码了,其实很重要的一点大家可以发现就是这里: jsonstr=json.dumps(obj,default=self.__default,ensure_ascii=False), ensure_ascee=False.
From:一号门
Previous:利用jQuery 动态加载 javascript
COMMENTS