错误原因
字面意思,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