数据格式化: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

 

posted @ 2021-01-06 17:03  士为知己  阅读(198)  评论(0)    收藏  举报