json序列化

引言:

           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))

  

posted @ 2021-08-02 13:03  Yuan_x  阅读(128)  评论(0编辑  收藏  举报