2013-05-08 2 views
1

사용자에게 데이터를 표시하기 위해 json.dumps를 사용하여 데이터를 자바 스크립트로 반환하려고합니다.자바 스크립트에 파이썬 (django) 데이터의 직렬화

버튼을 누를 때

Dajax 전화 : Dajaxice.chamber.ATableUpdate(TableUpdate);

내 아약스 기능 :

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

나는 값으로는, 모든 일을 같이하지만, 뜻 돌아 오면 나는 (동일한 mean2를 돌려주는 대신하는 경우 값은 numpy가있는 파일에서 읽음) 작동하지 않으며 "JSON을 직렬화 할 수 없습니까?"메시지가 표시됩니다.이 코드는 단순히 파일에서 데이터를 가져 와서 테이블의 사용자에게 데이터를 표시하는 것입니다. 파일이 시스템에 연결된 센서의 값으로 업데이트됩니다.

내 numpy 데이터를 직렬화하는 방법에 대한 아이디어가 있으십니까? 또는 자바 스크립트 및 djangos 템플릿을 사용하여 않고 내 html로 배열을 반환하는 방법? 이 모든 행 앞에 배열을 추가로

HTML 클래스는 나를 위해 작동하지 않았다 자바 스크립트를

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

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

파이썬 JSON 모듈은 here으로 나열된 특정 기본 파이썬 유형 만 처리 할 수 ​​있습니다.

numpy.loadtxt 함수는 array 형식을 반환하므로 직렬화 할 수 없습니다. 대신

후 JSON 변환하는 listarray 변환 :

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

이 조작 numpy 어레이의 크기에 따라 비용이 많이들 수있다.

+0

답변 해 주셔서 감사합니다. 하지만 여전히 목록을 사용하여 오류가 발생합니다. mean2를 인쇄하려고 할 때 모든 행 앞에 array ([900, 2.1]), array ([1000, -20.4]) "array"가 인쇄됩니다. 그러나 파일에서 작성하고 읽는 방식이 다르게 작동합니다. – madsendennes

+0

@madsendennes 데이터 입력 형식을 표시하지 않았지만 배열 배열이있는 것처럼 보입니다. 따라서 각 배열을 목록 유형으로 변환해야합니다. 대답의 전제는 남아 있습니다. 형식은 JSON serializer에서 지원하는 형식으로 변환해야합니다. –