python 序列化成json 乱码问题的解决

今天又网友问到, 在python  下将一个对象序列化成 json 时经常会报乱码, 甚至会报错, 的确会出现这种情况,因为在python 中默认使用的是  simplejson 库。但其实是可以通过配置选项解决的, 下面是我写的一个公共的转换对象到json与从json 转换到对象的公共类:
程序代码 程序代码


# -*- 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.


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: python 序列化成json 乱码问题的解决
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.