【python】TypeError: * is not JSON serializable

深度链接 / 2023-12-06 21:48:19 / 203

做项目时遇到TypeError: xxx is not JSON serializable,无法进行json类型转换。json.dumps支持自定义函数对特定类型数据进行序列化。

1、问题

a、datetime.datetime
  File "/usr/local/lib/python3.4/json/encoder.py", line 173, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2017, 8, 7, 16, 19, 48) is not JSON serializable

b、decimal.Decimal
  File "/usr/local/lib/python3.4/json/encoder.py", line 173, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: Decimal('984.000000') is not JSON serializable

  

2、解决办法

#使用自定义函数对特定类型进行序列化
a、datetime.datetime

class DatetimeEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime.datetime):
            return float(o)
        super(DatetimeEncoder, self).default(o) 
       
encode_data = json.dumps(data,cls=DatetimeEncoder)

b、decimal.Decimal

class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return float(o)
        super(DecimalEncoder, self).default(o)
        
encode_data = json.dumps(data,cls=DecimalEncoder)