这只是对json.dumps 用法的额外提示(这不是对问题问题的回答,而是对于那些必须转储 numpy 数据类型的人的技巧):
如果字典中有 NumPy 数据类型,json.dumps() 需要一个额外的参数,credit 转到 TypeError: Object of type 'ndarray' is not JSON serializable,它还会修复 TypeError: Object of type int64 is not JSON serializable 等错误:
class NumpyEncoder(json.JSONEncoder):
""" Special json encoder for np types """
def default(self, obj):
if isinstance(obj, (np.int_, np.intc, np.intp, np.int8,
np.int16, np.int32, np.int64, np.uint8,
np.uint16, np.uint32, np.uint64)):
return int(obj)
elif isinstance(obj, (np.float_, np.float16, np.float32,
np.float64)):
return float(obj)
elif isinstance(obj, (np.ndarray,)):
return obj.tolist()
return json.JSONEncoder.default(self, obj)
然后运行:
import json
#print(json.dumps(my_data[:2], indent=4, cls=NumpyEncoder)))
with open(my_dir+'/my_filename.json', 'w') as f:
json.dumps(my_data, indent=4, cls=NumpyEncoder)))
在 np.array() 的情况下,您可能还希望返回字符串而不是列表,因为数组打印为分布在行上的列表,如果您有很大或很多数组,这将破坏输出。警告:稍后从转储字典中访问项目以将它们作为原始数组返回更加困难。但是,如果您不介意只有一个数组字符串,这会使字典更具可读性。然后交换:
elif isinstance(obj, (np.ndarray,)):
return obj.tolist()
与:
elif isinstance(obj, (np.ndarray,)):
return str(obj)
或者只是:
else:
return str(obj)