转存json文件报错:TypeError: Object of type int64 is not JSON serializable

错误原因

字面意思,int64类型的数据不能保存到json,我的问题是使用python把numpy的array中的元素作为一个字典的值保存到json中,如图
在这里插入图片描述

我的方案

使用 json.dump()转存的时候报这个错。网上看到其他人的解决方案很多,相对来说比较麻烦,我就直接把numpy的array转换的列表的元素用python内置的类型转换int()转换一下,就成功解决了。
其他类似的数据类型错误应该也能这么解决, json.dump()本来就是python对象转存json文件,既然发生类型错误,那就说明我们使用的数据类型不是python内置的数据类型,给他转换一下就好了。
当然我没时间试验过,理解也是我自己的理解,仁者见仁智者见智,我只是记录我的问题,相当于抛砖引玉,如果解决不了你的问题那很抱歉。

大佬的方案

如果我的办法不行,那可以试试大佬的:

问题分析:
python3中没有int64这个数据类型,所有的整型都是int
报错里的int64指的是<class ‘numpy.int64’>,所以很有迷惑性
同样的还会出现 TypeError: Object of type float32/float64 is not JSON

解决方案1:

TypeError: Object of type int64 is not JSON serializable

def default_dump(obj):
    """Convert numpy classes to JSON serializable objects."""
    if isinstance(obj, (np.integer, np.floating, np.bool_)):
        return obj.item()
    elif isinstance(obj, np.ndarray):
        return obj.tolist()
    else:
        return obj
        
json.dumps(new_config,ensure_ascii=False, default=default_dump)

解决方案2:

import json

class JsonEncoder(json.JSONEncoder):
    """Convert numpy classes to JSON serializable objects."""

    def default(self, obj):
        if isinstance(obj, (np.integer, np.floating, np.bool_)):
            return obj.item()
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        else:
            return super(JsonEncoder, self).default(obj)
        
json.dumps(new_config,ensure_ascii=False, cls=JsonEncoder)

————————————————
版权声明:本文为优快云博主「我是一只程序⚪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_39561473/article/details/123227500

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值