如何解决错误“类型为int32的对象不可JSON序列化”

时间:2019-05-22 06:24:10

标签: python json python-3.x numpy

我正在尝试将一个字典数据保存为.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)
´´´

1 个答案:

答案 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可能不够。