NumPy 数组不是 JSON 可序列化的

新手上路,请多包涵

创建 NumPy 数组并将其保存为 Django 上下文变量后,我在加载网页时收到以下错误:

 array([   0,  239,  479,  717,  952, 1192, 1432, 1667], dtype=int64) is not JSON serializable

这是什么意思?

原文由 Karnivaurus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 596
2 个回答

我经常“jsonify”np.arrays。首先尝试在数组上使用“.tolist()”方法,如下所示:

 import numpy as np
import codecs, json

a = np.arange(10).reshape(2,5) # a 2 by 5 array
b = a.tolist() # nested lists with same data, indices
file_path = "/path.json" ## your path variable
json.dump(b, codecs.open(file_path, 'w', encoding='utf-8'),
          separators=(',', ':'),
          sort_keys=True,
          indent=4) ### this saves the array in .json format

为了“unjsonify”数组使用:

 obj_text = codecs.open(file_path, 'r', encoding='utf-8').read()
b_new = json.loads(obj_text)
a_new = np.array(b_new)

原文由 travelingbones 发布,翻译遵循 CC BY-SA 4.0 许可协议

将 numpy.ndarray 或任何嵌套列表组合存储为 JSON。

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

a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)
json_dump = json.dumps({'a': a, 'aa': [2, (2, 3, 4), a], 'bb': [2]},
                       cls=NumpyEncoder)
print(json_dump)

将输出:

 (2, 3)
{"a": [[1, 2, 3], [4, 5, 6]], "aa": [2, [2, 3, 4], [[1, 2, 3], [4, 5, 6]]], "bb": [2]}

从 JSON 恢复:

 json_load = json.loads(json_dump)
a_restored = np.asarray(json_load["a"])
print(a_restored)
print(a_restored.shape)

将输出:

 [[1 2 3]
 [4 5 6]]
(2, 3)

原文由 karlB 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题