小能豆

NumPy 数组不可序列化为 JSON

javascript

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

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

这意味着什么?


阅读 51

收藏
2024-09-02

共1个答案

小能豆

错误信息"is not JSON serializable"指示

解释

JSON(JavaScript 对象表示法)是一种用于序列化数据的文本格式(将其转换为可通过 Web 轻松传输的字符串格式)。在 Python 中,只有某些内置类型(如列表、字典、字符串、整数等)可直接序列化为 JSON。但是,NumPy 数组不属于这些类型,因为它们是具有自己数据类型的特殊对象(dtype=int64

解决方案

为了解决这个问题,您需要将 NumPy 数组转换为 JSON 可序列化格式(如 Python 列表),然后再将其传递给 Django 上下文。以下是

  1. 将 NumPy 数组转换为列表.tolist()方法

以下是如何修改您的

import numpy as np

# Example: Creating a NumPy array
numpy_array = np.array([0, 239, 479, 717, 952, 1192, 1432, 1667], dtype='int64')

# Convert the NumPy array to a Python list
context_variable = numpy_array.tolist()

# Pass the converted list to your Django context
context = {
    'array_data': context_variable,
}

在你的 Django 视图中

context当您在 Django 视图中使用它时,您将不再收到is not JSON serializable错误:

from django.shortcuts import render
import numpy as np

def your_view(request):
    # Your NumPy array
    numpy_array = np.array([0, 239, 479, 717, 952, 1192, 1432, 1667], dtype='int64')

    # Convert NumPy array to a list
    context_variable = numpy_array.tolist()

    # Pass the context to the template
    context = {
        'array_data': context_variable,
    }

    return render(request, 'your_template.html', context)

概括

  • NumPy 数组不能直接 JSON 序列化,因为它们不是标准 Python 数据类型。
  • 在将 NumPy 数组传递给 Django 模板之前,使用将其转换为列表.tolist()。这将使其与 JSON 序列化兼容并避免错误。
2024-09-02