处理 JSON 的 NumPy 数组序列化
使用 Django 框架在 Web 开发中使用 NumPy 数组时,您可能会遇到错误:
array([ 0, 239, 479, 717, 952, 1192, 1432, 1667], dtype=int64) is not JSON serializable
出现此错误是因为 NumPy 数组默认情况下不可 JSON 序列化。 JSON 是一种流行的数据交换格式,仅支持某些数据类型,例如整数、字符串和这些类型的数组。但是,NumPy 数组是复杂的多维对象,无法直接用 JSON 表示。
解决方案:将 NumPy 数组转换为 JSON
要解决此问题,您可以将将 NumPy 数组转换为 JSON 兼容的表示形式。推荐的方法是在数组上使用 .tolist() 方法:
<code class="python">import numpy as np a = np.arange(10).reshape(2,5) # Create a 2x5 array b = a.tolist() # Convert to a list of lists</code>
.tolist() 方法将 NumPy 数组转换为嵌套的元素列表,与 JSON 兼容。
保存和加载 JSON 数据
要将转换后的列表保存为 JSON 格式,请使用以下代码:
<code class="python">import codecs, json file_path = "/path/to/file.json" json.dump(b, codecs.open(file_path, 'w', encoding='utf-8'), separators=(',', ':'), sort_keys=True, indent=4)</code>
此代码将保存将 b 作为具有正确格式的指定路径中的 JSON 文件列出。
从 JSON 文件加载并重建 NumPy 数组:
<code class="python">new_b = json.loads(codecs.open(file_path, 'r', encoding='utf-8').read()) new_a = np.array(new_b)</code>
此代码读取 JSON 文件并将其转换回到列表 new_b 中。然后 np.array() 函数重建 NumPy 数组 new_a。
结论
通过将 NumPy 数组转换为 JSON 兼容的列表并使用适当的 JSON 序列化和反序列化方法,您可以有效地处理 Django 上下文变量中 NumPy 数据的存储和检索。这确保了数据可以在 Django 后端和前端之间安全高效地传输以进行渲染。
以上是如何在 Django 中序列化 JSON 的 NumPy 数组?的详细内容。更多信息请关注PHP中文网其他相关文章!