已解决(dumps/dump解析json报错)TypeError: Object of type JpegImageFile is not JSON serializable
报错代码
粉丝群里面的一个小伙伴想用python的json库解析json,但是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴)报错信息如下:
TypeError: Object of type JpegImageFile is not JSON serializable
报错翻译
报错信息翻译:
类型错误:JpegImageFile类型的对象不可JSON序列化
报错原因
报错原因:
这个问题是由于json.dumps()函数引起的,json.dumps()可处理的键值类型有:str、int、float、list、tuple、dict,若键值为其他类型数据时,dumps是将dict数据转化为str数据,但是dict数据中包含byte数据所以会报错。例如tensor、ndarray、bytes时则会报错。小伙伴们按下面的解决方法任选其一即可!!!
解决方法
解决方法1、首先将键值转换成上述合法的格式,然后再调用json.dumps()函数。
解决方法2:编写一个解码类 遇到byte就转为str:
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
if isinstance(obj, time):
return obj.__str__()
else:
return super(NpEncoder, self).default(obj)
然后在调用json.dump/dumps时,指定使用自定义序列化方法:
json.dumps(data, cls=MyEncoder)
帮忙解决
本文已收录于:《告别Bug》专栏
本专栏用于记录学习和工作中遇到的各种疑难Bug问题,以及粉丝群里小伙伴提出的各种问题,文章形式:报错代码 + 报错翻译 + 报错原因 + 解决方法,包括程序安装、运行程序过程中等等问题,订阅专栏+关注博主后如遇到其他问题可私聊帮忙解决!!!