TypeError: Object of type 'Decimal' is not JSON serializable 报错

报这个错是因为json.dumps函数发现字典里面有 Decimal类型的数据,无法JSON serializable
解决方法:是检查到Decimal类型的值转化成float类型

import json
class DecimalEncoder(json.JSONEncoder):
    def default(self,o):
        if isinstance(o,decimal.Decimal):
            return float(o)
        super(DecimalEncoder,self).default(o)


#引用
j = json.dumps(var,cls=DecimalEncoder)

类似还有:TypeError: Object of type 'type' is not JSON serializable

原因是因为json.dumps函数发现字典里面有bytes类型的数据,无法编码。解决方法:在编码函数之前写一个编码类,只要检查到了是bytes类型的数据就把它转化成str类型。

import json

class BytesEncoder(json.JSONEncoder):
    def default(self,obj):
          """
        只要检查到了是bytes类型的数据就把它转为str类型
        :param obj:
        :return:
         """
        if isinstance(obj,bytes):
           return str(obj,encoding='utf-8')
        return json.JSONEncoder.default(self,obj)

 

你可能感兴趣的:(python)