【文件处理】TypeError: Object of type ‘ndarray‘ is not JSON serializable错误解决方法
程序员文章站
2022-03-03 18:51:43
目录一、将字典写入json文件二、json文件中读取字典三、将字典写入TXT文件中四、从TXT中读取字典一、将字典写入json文件import jsontest_dict = { 'version': "1.0", 'explain': { 'used': True, 'details': "this is for josn test", }}#将字典转换为字符串形式json_str = json.dumps(t....
目录
一、将字典写入json文件
import json
test_dict = {
'version': "1.0",
'explain': {
'used': True,
'details': "this is for josn test",
}
}
#将字典转换为字符串形式
json_str = json.dumps(test_dict, indent=4)#注意这个indent参数,可以保存字典的缩进格式,否则为一行
with open('test_data.json', 'w') as json_file:
json_file.write(json_str)
二、json文件中读取字典
with open('test_data.json', 'r') as json_file:
dic = json.load(json_file)
三、将字典写入TXT文件中
import json
dic = {
'andy':{
'age': 23,
'city': 'beijing',
'skill': 'python'
},
'william': {
'age': 25,
'city': 'shanghai',
'skill': 'js'
}
}
js = json.dumps(dic)
file = open('test.txt', 'w')
file.write(js)
file.close()
四、从TXT中读取字典
import json
file = open('test.txt', 'r')
js = file.read()
dic = json.loads(js)
print(dic)
file.close()
五、解决字典含数组存入json文件失败的方法
因为json无法序列化
1、存入前将数组变成列表
array.tolist()
2、扩展类方法
class NpEncoder(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()
else:
return super(NpEncoder, self).default(obj)
将上述代码添加到你的代码中,然后改成json.dumps(data, cls=NpEncoder)
TypeError: Object of type 'ndarray' is not JSON serializable
from collections import defaultdict
import json
import numpy as np
class NpEncoder(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()
else:
return super(NpEncoder, self).default(obj)
video = defaultdict(list)
video["label"].append("haha")
video["data"].append(234)
video["score"].append(0.3)
video["label"].append("xixi")
video["data"].append(123)
video["score"].append(0.7)
test_dict = {
'version': "1.0",
'results': (np.zeros((2,3))),
'explain': {
'used': True,
'details': "this is for josn test",
}
}
print(test_dict)
json_str = json.dumps(test_dict, indent=4,cls=NpEncoder)#注意这个indent参数
with open('test_data.json', 'w') as json_file:
json_file.write(json_str)
with open('test_data.json', 'r') as json_file:
dic = json.load(json_file)
print(type(dic))
参考: