2011-03-29 4 views
0

현재 Jquery Datatables 플러그인과 Django에서 javascript와 python을 사용하는 프로젝트를 진행하고 있습니다. 내 문제는 파이썬에서 사전을 작성하려고하는데, json.dumps (사전)를 수행하여 JQuery로 보내기를 원한다.JSON에 대한 동적 사전 문제

변환이 수행되고 디버거를 사용하여 JQuery/Javascript 코드의 데이터를 볼 수는 있지만 JSON이 잘못된 이유가 내 테이블에 채워지지 않습니다. 이것은 내가 파이썬 코드에서 사전을 만드는 방식으로 인해 믿습니다. 나는이 단계에서 내가 잘못된 것을하고 있음을 안다. 필자가 본 모든 예는 사전을 동적으로 작성해야하는 하드 코딩 된 사전을 보여줍니다. 파이썬에서 사용하는 코드는 다음과 같습니다. 누군가 내가 잘못하고있는 것을 알고 있다면 제게 미치겠다는 것을 알려주세요.

dictionary = {} 
    array = [] 
    status = 'OFF' 
    for item in self.scanResults: 
     if item[6]: 
      status = 'ON' 
     else: 
      status = 'OFF' 

     array.append({'MAC_ADDRESS':item['mac_addr'], 
        'IP_ADDRESS':item['ip_addr'], 
        'NAME':item['name'], 
        'OS':item['os'], 
        'OS_VERSION':item['os_version'], 
        'WORKGROUP':'--', 
        'STATUS':status 
     }) 
    dictionary = dict({'aaData': array})  

JQuery와 측의 JSON 형식으로해야한다 : - - :이 최신 사전 코드의 순열 어떤 도움을

{"aaData": [[..,..,..,..,],[..,..,..,..]]} 

건배 당신이 제공 할 수있는

크리스

편집 :

추가 정보. 이전에 그것을 포함하지 않아서 미안해. 나는 그것을 다음과 같은 방법을 인코딩 해요 : -

반환 HttpResponse에 (simplejson.dumps (response_dict), 마임 = '응용 프로그램/자바 스크립트')

결과의 화면 덤프는 다음과 같습니다 -

{ "aaData": [{ "STATUS": "ON", "WORKGROUP": "-", "IP_ADDRESS": "192.168.0.2", "OS_VERSION": "8.04", "MAC_ADDRESS": "00:10 : "", "작업 그룹": "-", "IP_ADDRESS": "192.168", " "OS_VERSION": "8.04", "MAC_ADDRESS": "00 : 19 : a3 : 41 : 16 : 31", "OS": "Linux", "NAME": "Machine_Two"}, { "STATUS ":"ON ","WORKGROUP ":"- ","IP_ADDRESS ":"192.168.0.4 ","OS_VERSION ":"8.04 ","MAC_ADDRESS ":"00:19 : "상태 :" "켜기", "작업 그룹": "-", "IP_ADDRESS": "192.168", "b3 : 43 : 16 : 32", "OS": "Linux", "NAME": "Machine_Three" OS_VERSION ":"8.04 ","MAC_ADDRESS ":"00 : 19 : c3 : 44 : 16 : 33 ","OS ":"Linux ","NAME ":"Machine_Four "}, {"STATUS ":"ON ","WORKGROUP ":"- ","IP_ADDRESS ":"192.168.0.6 ","OS_VERSION ":"8.04 ","MAC_ADDRESS ":"00 : 19 : d3 : 45 : 16 : 34 " , "IP_ADDRESS": "192.168.0.7", "OS_VERSION": "Linux", "NAME": "Machine_Five" "8.04", "MAC_ADDRESS": "00 : 19 : e3 : 46 : 16 : 37", "OS": "Linux", "NAME": "Machine_Six"}, { "STATUS": "ON", "WORKGROUP ":"IP_ADDRESS ":"192.168.0.8 ","OS_VERSION ":"8.04 ","MAC_ADDRESS ":"00 : 19 : f3 : 47 : 16 : 38 ","OS ":"Linux " IP_ADDRESS : "192.168.0.9", "OS_VERSION": "8.04", "MAC_ADDRESS": "", " "00 : 19 : g3 : 48 : 16 : 38", "OS": "Linux", "NAME": "Machine_Eight"}, { "STATUS": "ON", "WORKGROUP" IP_ADDRESS ":"192.168.0.10 ","OS_VERSION ":"8.04 ","MAC_ADDRESS ":"00 : 19 : h3 : 49 : 16 : 41 ","OS " "리눅스", "NAME": "Machine_Nine"}]}

실제 epected 결과는 다음과 같습니다 -

{ "aaData"[[ "ON", "-", "192.168.0.6 ","8.04 ","00 : 19 : d3 : 45 : 16 : 34 ","Linux ","Machine_Five "], ["ON ","- ","192.168.0.6 " "00 : 19 : d3 : 45 : 16 : 34", "Linux", "Machine_Five"]]} 아이디어를 얻으실 수 있습니다.

저는 이것을 위해 jQuery DataTables 플러그인을 사용하고 있습니다. 나는 문제가 기형적 인 사전 즉 ie : 나의 잘못이라고 믿는다.저는 파이썬에 익숙하지 않고 사전의 다양한 순열을 시험해 보았습니다. 그리고 그것을하지 못하게하는 10 가지 이상의 방법을 발견했습니다. 나는 그 애매한 올바른 방법에 대한 힌트가 필요합니다.

건배 다시

크리스

해결 :

는 내가 그들을 (목록리스트) 원하는 경우 서버에서 다시 배열의 배열을 전달하고 분석하여 문제를 해결했습니다 클라이언트 측에서는 고정 된 크기의 목록으로 인해 성능 문제가 발생하지 않습니다. 나중에 좀 더 자세히 살펴보고 더 나은 해결책이나 좀 더 우아한 해결책을 게시 할 것입니다.

+1

'json.dumps (사전)'하고 있니? 그 결과는 무엇입니까? 예상과 다른 점은 무엇입니까? (나는 예상되는 결과를 전혀 이해하지 못한다. 실제 예제 데이터를 제공한다.) –

+0

값은 따옴표로 묶어야한다. – meouw

+0

@ meouw : 직렬화 될 때 표시 될 것이다. –

답변

0

질문에있는 코드에 사전을 문자열로 직렬화하는 방법에 대해 알아야 할 핵심 비트가 없습니다. str(dictionary) 일을하는 경우 작동하지 않는 경우 simplejson을 사용하여 인코딩해야합니다. 이 라이브러리는 easy_install과 함께 설치하거나 Python 2.6 이상을 사용하는 경우 json으로 포함됩니다.

파이썬 객체를 JSON 문자열로 인코딩하려면 간단히 json.dumps(dictionary)을 사용하십시오.

자바 스크립트 코드에 중첩 된 목록이 포함 된 개체가 있어야하지만 Python 코드는 사전에 {"aaData": [{..:.., ..:..},{..:.., ..:..}]}과 같은 개체 (예 : 목록에있는 사전)를 생성하고있는 것으로 보입니다. JSON 문자열을 인코딩하는 방법에 문제가 없다면 예상 한 객체에 대해 명확 해 질 수 있습니다.

편집

파이썬 코드에서 이그나시오 바스케스 - 에이 브람스의 상태는 다음 그들이 JSON으로 인코딩 할 때 그들에게 마술리스트로 변환 것으로 기대 목록에 사전을 추가하는 것처럼. 현재 보내고있는 데이터로 작업하도록 자바 스크립트를 변환하거나 현재 파이썬 코드를 Ignacio가 제안한 것과 비슷한 것으로 대체해야합니다.

목록을 사용하여 구조를 나타낼 때 문제가 발생하기 쉽고 인덱스를 잘못 작성하면 잘못된 값을 사용하게되므로 이러한 옵션 중 첫 번째를 제안합니다. 사전/객체로 유지하면 이름으로 항목에 액세스 할 수 있으므로 문제를 피할 수 있습니다.

+0

건배 한번 해봅시다. 나는 우아한 솔루션을 원했지만 아마도 자바 스크립트 끝 부분의 작은 파서가 너무 나쁘지는 않을 것입니다. 적어도 나는 나중에 문제로 돌아올 수있다. 건배 – Lipwig

+0

건배 나는이 접근법을 해결했지만 지금은 괜찮습니다. 나중에 시간이있을 때 다시보아야 할 것입니다. – Lipwig

2

형식이 잘못된 경우 형식이 잘못되었습니다. 당신이 찾으 셨나요?

array.append([item['mac_addr'], 
       item['ip_addr'], 
       item['name'], 
       item['os'], 
       item['os_version'], 
       '--', 
       status 
    ]) 
+0

정말 그 뜻이 아니길 바래요! 예를 들어 "예상 데이터" ''192.168.0.6 '', '8.04', '00 : 19 : d3 : 45 : 16 : 34', 'Linux', 'Machine_Five' ''IP, os_version, MAC, os, '-'및 상태가 없음 –

0

은 "예상 데이터"(즉, 오히려 예상치 못한 순서 스크램블에)는 LIST에서 다섯 항목으로 나타납니다; 당신은 때우는 세븐에 항목을 DICT- WHY ??

2 (계정으로 예고없이 편집을 복용) 가지고 :

은 "예상되는 데이터는"(즉, 오히려 예상치 못한 순서 스크램블에)는 LIST에 칠 것으로 보인다; 당신은 7 개의 열쇠를 채우고 있습니다 : 가치 항목을 DICT - WHY ??

예상되는 데이터 목록이 스크램블링 된 순서 여야합니까?

+0

예상되는 데이터는 예상되는 결과 형식의 아이디어를 제공하기위한 것입니다. – Lipwig

+0

@ 크리스 램 (Cris Lamb) : 목록에있는 5 개 항목은 딕트 (dict)에서 7 개 항목이어야한다는 절대적으로 아무런 아이디어도 제공하지 않습니다. –

+0

당신이 '우스운'느낌을 갖게되어서 미안합니다. 만약 내가 너를 확인했다면, 나는 실제로 그것을 수정했다. – Lipwig

0

array.append([item['mac_addr'], # note: we are appending array. 
       item['ip_addr'], 
       item['name'], 
       item['os'], 
       item['os_version'], 
       '--', 
       status 
      ]) 

이렇게 직렬화하면 다음 형식의 데이터가됩니다.
[ "XXX", "YYY", "ZZZ"], [ "xx1", "YY1", "zz1은"]
넣어 사전, 사전 = { 'aaData'어레이} 그

+0

코드 단편은 유효하지 않습니다 Python ...'[expression1 : expression2]'는 표현식이 아래 첨자로 평가 될 때만 의미가 있습니다 –

+0

나는 이미 그걸 시도하고 두 번 다시 시도했습니다. 그 형식 항목, 항목. . . 목록이 필요합니다 : {}. 좋은 시도 어쨌든. – Lipwig

+0

@Chris Lamb : ** list ie {} ** ??? 이것을 이해해보십시오.'[]'는 목록입니다; '{}'는 딕트입니다. –