【问题标题】:Serialization of python (django) data to javascript将python(django)数据序列化为javascript
【发布时间】:2013-05-08 23:24:24
【问题描述】:

我正在尝试使用 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 从文件中读取的相同值)它不起作用,并给出错误:“Is not JSON serializable”

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

关于如何序列化我的 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;
 }

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

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})

【问题讨论】:

    标签: python django json simplejson dajax


    【解决方案1】:

    Python JSON 模块只能处理here 列出的某些原生 Python 类型。

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

    改为将array 转换为list,然后再转换为JSON:

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

    根据numpy 数组的大小,此操作可能会很昂贵。

    【讨论】:

    • 感谢您的回答。但是使用列表仍然会出错。尝试打印 mean2 时,每行前面都会打印“array”:array([900, 2.1]), array([1000, -20.4])。但是,通过与文件不同的写入和读取方式使其工作。
    • @madsendennes 您没有显示数据的输入格式,但看起来好像您有一个数组数组。因此,您必须将每个数组转换为列表类型。答案的前提仍然存在;类型必须转换为序列化之前链接中列出的 JSON 序列化程序支持的类型。
    猜你喜欢
    • 2014-06-28
    • 2017-03-21
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多