2010-03-12 46 views
1

我想發送一個Python列表到客戶端(編碼爲JSON)。這是我寫的代碼片段:傳遞一個Python列表使用JSON和Django

array_to_js = [vld_id, vld_error, False] 
array_to_js[2] = True 
jsonValidateReturn = simplejson.dumps(array_to_js) 
return HttpResponse(jsonValidateReturn, mimetype='application/json') 

如何從客戶端訪問它?我可以像下面那樣訪問它嗎?

jsonValidateReturn[0] 

或者如何爲返回的JSON數組指定一個名稱以訪問它?

其實我想轉換一個服務器端Ajax腳本返回一個數組(見堆棧溢出問題Creating a JSON response using Django and Python來處理客戶端的POST請求,所以我想在與Python回報同樣的事情,但它沒」牛逼順利

+1

你用什麼來處理響應? JavaScript的?蟒蛇? – SilentGhost 2010-03-12 19:31:03

+0

我正在使用python – Switch 2010-03-12 19:37:12

+0

你能否更新問題以提供更多詳細信息。你有一臺Python服務器嗎?和一個Python客戶端? Python客戶端如何與服務器聯繫?客戶端是否使用'urrlib2'?那是你在做什麼? – 2010-03-12 19:53:33

回答

0

如果客戶端和服務器都在Python中,這是你需要知道的。

服務器。使用字典來獲取字段上的標籤。寫這個作爲迴應。

>>> import json 
>>> json.dumps({'vld_id':1,'vls_error':2,'something_else':True}) 
'{"vld_id": 1, "something_else": true, "vls_error": 2}' 

客戶。讀完響應字符串後,以這種方式創建一個Python字典。

>>> json.loads('{"vld_id": 1, "something_else": true, "vls_error": 2}') 
{u'vld_id': 1, u'something_else': True, u'vls_error': 2} 
1

JSON數組會沒有名字/轉讓傾倒

也就是說,爲了給它一個名字,在你的JavaScript代碼,你會做這樣的事情:。

var my_json_data_dump = function_that_gets_json_data(); 

如果你想進行可視化,例如,替代:

var my_json_data_dump = { 'first_name' : Bob, 'last_name': smith }; 

此外,像Iganacio說,你會需要這樣的東西json2.js來分析字符串到最後一個示例的對象。你可以在function_that_gets_json_data內打包解析步驟,或者如果你使用jQuery,你可以用jQuery.getJSON()這樣的函數來完成。

json2.js仍然很好,但。


在迴應評論(我需要空間和標記):

是的,當然。所有的Python方面都在爲你編碼一個字符串表示(JSON)。您可以執行諸如'var blah = %s' % json.dumps(obj_to_encode)之類的操作,然後在客戶端,而不是簡單地將響應解析爲JSON,而是將其解析爲JavaScript。

我不會推薦這幾個原因:

  1. 你不再輸出JSON。如果您想在不想使用變量名稱的上下文中使用它,或者無法解析JavaScript,該怎麼辦?
  2. 您正在評估JavaScript,而不是簡單地解析JSON。這是一個對安全漏洞開放的操作(如果有人可以種子數據,他們可能會執行攻擊)。

我想你正面臨着一些我認爲每個Ajax開發者都在運行的東西。你希望在你的應用程序中有一個真實的地方,但是現在你被鼓勵去定義變量和JavaScript中的東西。所以你必須交叉引用你的Python代碼和使用它的JavaScript代碼。

我不會太掛在上面。我看不出爲什麼你絕對需要用這種方式來控制Python的變量名稱。如果您指望變量名稱相同,以便您可以在隨後的JavaScript或Python代碼中引用它,則可以通過簡單地重構代碼來避免這種情況。我不是說這是一種批評,而只是一種非常有用的(一般)建議!

+0

有什麼方法可以從Python端分配名稱 – Switch 2010-03-12 19:41:09