190523-Python之json无法序列化部分类型数据问题解决方案

文章目录
  1. II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注

直接使用python的json库,实现对象和json串的互转,一般使用姿势也很简单,然而今天在使用的时候,需要序列化的对象中有datetime类型的对象,结果就抛出了异常TypeError: Object of type datetime is not JSON serializable

1
2
3
4
5
6
7
import json
result = {"hello": "你好", "name": "一灰灰blog"}
str_json = json.dumps(result)
print(str_json)

j_res = json.loads(str_json)
print(j_res)

output

普通执行没啥问题,今天的result中,存了一个datetime对象,结果报错了

接着上面的demo,添加一个datetime对象来实现场景复现

1
2
3
import datetime
result['now'] = datetime.datetime.now()
str_json = json.dumps(result)

然后出现下面这个问题

output

从提示信息可以看出,关键点在于 TypeError: Object of type datetime is not JSON serializable

json.dumps函数的接口前面,可以传入一个cls参数,这个用来自定义实现不同类型的序列化规则,如我们希望加一个时间的序列化

1
2
3
4
5
6
7
8
9
10
11
class DateJsonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
s_t = obj.strftime('%Y-%m-%dT%H:%M:%S.%f').strip('0')
return {"$date": s_t + 'Z'}
elif isinstance(obj, datetime.date):
return {"$date": obj.strftime('%Y-%m-%d')}
else:
return json.JSONEncoder.default(self, obj)

str_json = json.dumps(result)

然后再看下输出,正常序列化了;但是反序列化时,就需要自己额外处理了

output

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×