数据格式化:json.dumps及redis来源数据等问题
关于json.dumps出现datetime, tuple等问题,reids读取数据出现bytes等问题,可用代码中的例进行改善
1 import datetime 2 3 4 class DataConverter(object): 5 def __init__(self, data: (list, tuple, dict, str, bytes), null2empty: bool = True, tuple2list: bool = True, 6 set2list: bool = True, 7 datetime2str: bool = True): 8 """ 9 :param data: dict, tuple, list, set, int, str, bytes 10 :param null2empty: convert None to '' 11 :param tuple2list: convert the tuple element to a list 12 :param set2list: convert the set element to a list 13 :param datetime2str: convert the datetime or date element to str 14 :return: dict 15 Usage: 16 >>> DataConverter({b'a': 1, b'c': [b'hello', 'world']}).convert() 17 {'a': 1, 'c': ['hello', 'world']} 18 >>> DataConverter(([1, b'2'])).convert() 19 [1, '2']) 20 >>> DataConverter({1, '1', b'2'}).convert() 21 [1, '1', '2'] 22 >>> DataConverter((1, None, b'x', 'y')).convert() 23 [1, '', 'x', 'y'] 24 """ 25 self._data = data 26 self.null2empty = null2empty 27 self.tuple2list = tuple2list 28 self.set2list = set2list 29 self.datetime2str = datetime2str 30 31 def __del__(self): 32 del self._data 33 34 def convert(self): 35 return self._convert(self._data) 36 37 def _convert(self, data): 38 if data is None: 39 if self.null2empty: 40 return '' 41 else: 42 return data 43 elif isinstance(data, datetime.datetime): 44 # datetime.datetime must be on top 45 if self.datetime2str: 46 return data.strftime('%Y-%m-%d %H:%M:%S') 47 else: 48 return data 49 elif isinstance(data, datetime.date): 50 # datetime.date must be on bottom 51 if self.datetime2str: 52 return data.strftime('%Y-%m-%d') 53 else: 54 return data 55 elif isinstance(data, bytes): 56 return data.decode() 57 elif isinstance(data, dict): 58 return dict(map(self._convert, data.items())) 59 elif isinstance(data, list): 60 return list(map(self._convert, data)) 61 elif isinstance(data, tuple): 62 if self.tuple2list: 63 return list(map(self._convert, data)) 64 else: 65 return tuple(map(self._convert, data)) 66 elif isinstance(data, set): 67 if self.set2list: 68 return list(map(self._convert, data)) 69 else: 70 return set(map(self._convert, data)) 71 else: 72 # int, float... 73 return data