引言:
json数据中可能存在 datetime ,Decimal类型的数据,比如使用ORM返回的数据,然后在序列化json的时候就会报错,并且json的数据结构可能是嵌套的
代码:
from datetime import datetime, date
from decimal import Decimal
class SerData(object):
@staticmethod
def ser_data(data):
# 如果确定 json 数据中含有空字段 下边的判断需要删掉
if not data:
raise KeyError("传入数据不可以为空")
if isinstance(data, list or tuple):
datas = []
for i in data:
a = SerData.ser_data(i)
datas.append(a)
return datas
elif isinstance(data, dict):
for k in data.keys():
data[k] = SerData.ser_data(data[k])
return data
elif isinstance(data, datetime) or isinstance(data, date):
return str(data)
elif isinstance(data, Decimal):
return round(float(data), 2)
else:
return data
if __name__ == ‘__main__‘:
dict_a = {"a": datetime.now(), "b": [{"c": Decimal(222.22)}]}
list_b = [{"aa": datetime.now()}, {"bb": [{"c": Decimal(333.22)}]}]
list_c = [datetime.now(), Decimal(333.22), {"bb": [{"c": Decimal(333.22)}]},
{"a": datetime.now(), "b": [{"c": Decimal(222.22)}]},
[{"aa": datetime.now()}, {"bb": [{"c": Decimal(333.22)}]}]]
list_d = ["2021", {"dd": {"ee": {"ff": [Decimal(666.22)], "ffff": {"times": datetime.now()}}}}]
print(SerData.ser_data(dict_a))
print(SerData.ser_data(list_b))
print(SerData.ser_data(list_c))
print(SerData.ser_data(list_d))
原文:https://www.cnblogs.com/yuan-x/p/15089458.html