最近一直会遇到无法格式化datetime的问题 ,百度之 , 解决方案如下 :

  • 1 不使用json库 ,改用其他的第三方json库
  • 2 继承json类 ,重写解析方法
  • 3 利用cls参数扩展json类 ,赋予解析datetime的能力 ,这里使用第三种

首先是完成可以处理datetime的json类 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import json
from datetime import datetime

class DateEncoder(json.JSONEncoder):
'''
扩充JSON类 ,解决不能处理日期的BUG
'''
def default(self, obj):
if isinstance(obj, datetime):
return obj.__str__()
return json.JSONEncoder.default(self, obj)

# 使用json类时 ,把类实例传入json.dumps() 的cls参数 

def json_encode(data, sort_keys=False):
'''处理JSON 默认输出缩进为4的漂亮格式
:param data: 数据
:param sort_keys: 是否是格式化
:return:
'''
return json.dumps(
data, cls=DateEncoder, ensure_ascii=False,
indent=4, sort_keys=sort_keys
)