Сериализация данных Python (Django) в JavaScript
Я пытаюсь вернуть данные в javascript, используя json.dumps, чтобы показать данные пользователю.
Вызов 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"
Код просто извлекает данные из файла и показывает данные пользователю в виде таблицы. Файл обновляется значениями датчиков, подключенных к системе.
Любые идеи о том, как сериализовать мои данные? Или как вернуть массив в мой HTML без использования JavaScript и только с использованием шаблона Djangos?
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})
1 ответ
Модуль Python JSON может обрабатывать только определенные родные типы Python, перечисленные здесь.
numpy.loadtxt
функция возвращает array
типа и так не сериализуемо.
Вместо этого преобразуйте array
к list
, а затем преобразовать в JSON:
mean2 = list(numpy.loadtxt("table_mean.txt"))
return json.dumps({"mean": mean})
Эта операция может быть дорогой в зависимости от размера numpy
массив.