1

我正在尝试使用 json.dumps 将数据返回到 javascript,以便向用户显示数据。

按下按钮时的 Dajax 调用: Dajaxice.chamber.ATableUpdate(TableUpdate);

我的ajax函数:

@dajaxice_register
def ATableUpdate(request):
    mean = [[900, 2.1],[1000, -20.4],[1100, -15.4],[1200, -30.5]]
    numpy.savetxt("table_mean.txt", mean)
    mean2 = numpy.loadtxt("table_mean.txt")
    return json.dumps({"mean": mean})

如果我返回值 mean 如图所示,一切正常,但如果我返回 mean2 (从具有 numpy 的文件中读取的相同值)它不起作用,并给出错误:“不是 JSON 可序列化”

该代码只是从文件中提取数据并在表格中向用户显示数据。该文件使用来自连接到系统的传感器的值进行更新。

关于如何序列化我的 numpy 数据的任何想法?或者如何在不使用 javascript 且仅使用 djangos 模板的情况下将数组返回到我的 html?

用于打印表格的 HTML 类

<div class="box_result_inner">
<table cellspacing="0px" cellpadding="1px" border="1px" id="tablehtml">
</table>  
</div>

Javascript

function TableUpdate(data){
    var col=data.mean[0].length;
    var row=data.mean.length;
    buffer='';
    for(var r = 0; r < row; r++){
        buffer += "<tr>";
        for(var c = 0; c < col ; c++){
            buffer += "<td>" + data.mean[r][c] + "</td>";
        }
        buffer += "</tr>";
    }
    document.getElementById("tablehtml").innerHTML = buffer;
 }

更新 不幸的是列表对我不起作用,因为它在每一行前面添加了数组,但是,它可以使用:

with open("chamber/control/data/table_mean.txt", 'wb') as fp:
    json.dump(mean, fp)

with open("chamber/control/data/table_mean.txt", 'rb') as fp:
    mean2 = json.load(fp)

return json.dumps({"mean": mean2})
4

1 回答 1

1

Python JSON 模块只能处理此处列出的某些本机 Python 类型。

numpy.loadtxt函数返回一个array类型,因此不可序列化。

相反,将 转换array为 a list,然后转换为 JSON:

mean2 = list(numpy.loadtxt("table_mean.txt"))
return json.dumps({"mean": mean})

此操作可能很昂贵,具体取决于numpy数组的大小。

于 2013-05-09T00:06:53.957 回答