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

af7jpaap  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(373)

我在分析嵌套字典,它们的嵌套程度不同(字典中的字典,字典中的字典,等等),我事先不知道字典的嵌套程度。
问题是,某些字典值 numpy.ndarrays . 当我试着写字典的时候 my_dictionary 使用

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 要列出吗?
还是有其他方法可以克服这个错误?

vaj7vani

vaj7vani1#

你可以定制 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
            ]
        }
    ]
}

相关问题