已解决TypeError: Object of type JpegImageFile is not JSON serializable

已解决(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问题,以及粉丝群里小伙伴提出的各种问题,文章形式:报错代码 + 报错翻译 + 报错原因 + 解决方法,包括程序安装、运行程序过程中等等问题,订阅专栏+关注博主后如遇到其他问题可私聊帮忙解决!!!

猜你喜欢

转载自blog.csdn.net/yuan2019035055/article/details/126742842
今日推荐