我有一个以NumPy数组形式处理数据的程序,需要以JSON格式存储(以后将其传递给另一个程序以显示数据)。当我尝试以下内容时:
my_array = np.array([3, 4, 5])
json.dumps(my_array)
我收到错误消息
TypeError: array([3, 4, 5]) is not JSON serializable
事实证明,数组不可序列化。我希望通过将数组转换为普通列表来解决这个问题,但是如果我尝试
my_array = np.array([3, 4, 5])
my_list = list(my_array)
json.dumps(my_list)
我只是读错了
TypeError: 3 is not JSON serializable
(3
似乎是因为' 3'是列表的第一个元素)
更奇怪的是,当我尝试从头开始重建列表时,这个错误仍然存在:
def plain_list(ls):
pl = []
for element in ls:
pl.append(element)
return pl
my_array = np.array([3, 4, 5])
my_list = plain_list(my_array)
json.dumps(my_list)
仍然会返回
TypeError: 3 is not JSON serializable
我有两个问题:
答案 0 :(得分:8)
3
是一个NumPy integer,它显示为常规Python int,但不是一个。使用tolist
获取普通Python整数列表:
json.dumps(my_array.tolist())
这也会将多维数组转换为嵌套列表,因此您不必处理3维数组的3层列表理解。
答案 1 :(得分:0)
除了user2357112关于如何专门使代码正常工作的正确答案之外,请考虑扩展json
以便能够按照指定here对数组进行编码。