我正在尝试将一个字典数据保存为.json文件格式。 当我尝试json.dump(JSON,json_file)时,它引发错误:int32类型的对象不可JSON序列化。
我知道,这是因为我在词典中使用了一些numpy数据。
这是我尝试过的代码。
import json
for i in range(1):
g = Balea_coordinate[i] # numpy array
h = DM_coordinate[i] # numpy array
JSON = {"img_metadata" : {
"date" : "date",
"Method" : "SIFT+RANSACK",
"filename" : "Balea_",
"size" : "SIZE",
"regions":[{"0":{"shape_attributes":{"name":"polygon","all_points_x":[g[0,0,0],g[1,0,0],g[2,0,0],g[3,0,0]],
"all_points_y":[g[0,0,1],g[1,0,1],g[2,0,1],g[3,0,1]]},
"region_attributes":{"name":"Logo","type":"Balea"}},
"1":{"shape_attributes":{"name":"polygon","all_points_x":[h[0,0,0],h[1,0,0],h[2,0,0],h[3,0,0]],
"all_points_y":[h[0,0,1],h[1,0,1],h[2,0,1],h[3,0,1]]},
"region_attributes":{"name":"Logo","type":"DM"}}}]}}
with open('personal.json', 'w') as json_file:
json.dump(JSON, json_file)
´´´
答案 0 :(得分:0)
我建议扩展默认的JSONEncoder以处理numpy.int32类型(或任何其他必需的类型)。
class npEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.int32):
return int(obj)
return json.JSONEncoder.default(self, obj)
然后在json.dump(JSON, json_file, cls=npEncoder)
中使用它。根据您的要求,简单的转换np.int32 -> int
可能不够。