如何将字典中嵌套的 numpy 数组转换为 JSON?

How to convert nested numpy arrays in a dictionary to JSON?

我正在解析嵌套字典,它们具有不同程度的嵌套(字典中的字典中的字典等)我事先不知道字典的嵌套程度。

问题是,某些字典值是 numpy.ndarrays。当我尝试用

将字典 my_dictionary 写入 JSON 时
with open(my_dictionary, 'w') as f:
    json.dump(my_dictionary, f, indent=4) 

我会得到以下错误:

TypeError: Object of type ndarray is not JSON serializable

自然地,解决这个问题的一种方法是简单地将所有 numpy.ndarray 值转换为包含 .tolist().

的列表

但是,鉴于我不知道字典的嵌套程度,我如何通过算法检查任何嵌套字典的所有值并将 ndarray 转换为列表?

或者有其他方法可以克服这个错误吗?

您可以自定义 json.JSONEncoder。例如:

import json


class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.ndarray):
            return obj.tolist()
        return json.JSONEncoder.default(self, obj)


data = {"data": [{"obj": np.array([1, 2, 3])}]}

print(json.dumps(data, cls=MyEncoder, indent=4))

打印:

{
    "data": [
        {
            "obj": [
                1,
                2,
                3
            ]
        }
    ]
}