2012-03-20 113 views
2

我創建了一個表單,當我點擊提交按鈕時,我將3值賦給一個javascript dict併發送給python腳本來處理,但是我的web瀏覽器告訴我一個錯誤!在python輸出中刪除`u`字符

從Json的錯誤:{u'food ':90,u'cargo':70,u'fuel':50}的SyntaxError

controller.js

function customiseCtrl($xhr){ 
var self = this; 

checkPoint(); 
this.process = function(){ 
    if (checkPoint()){ 

     var newPlayer = {"fuel":value, "food":value2, "cargo":value3 }; 

     $xhr('POST', '/process', newPlayer, function (code, response) { 
      self.x = response; 

     }); 
    } 
}; 


} 

/過程 - > Python腳本(我想讀的「信息」的信息,並將其寫入到谷歌應用程序引擎。

def post(self): 
user = users.get_current_user() 
player = Player(); 

info = json.loads(self.request.body) 
player.fuel = info.fuel 
self.response.out.write(info) 
+4

Python的'repr'(這裏隱式調用)不是爲了產生JSON而設計的。 – robert 2012-03-20 16:45:48

+1

[Removing u in list](http://stackoverflow.com/questions/9773121/removing-u-in-list) – geoffspear 2012-03-20 17:24:32

回答

8

打印Python字典在很多情況下不會生成有效的JSON。你想要json模塊:

import json 

# ... snip ... 

self.response.out.write(json.dumps(info)) 
# or 
json.dump(info, self.response.out) 
+0

'json.dump(info,self.response)'也可以工作,如果它是一個類似文件的對象 – ThiefMaster 2012-03-20 16:47:56

+0

謝謝,補充。兩者之間可能存在性能差異? – nrabinowitz 2012-03-20 16:51:17

+1

對於複雜或大型的數據集,是的,使用'json.dump'會更高效。 – 2012-03-20 16:56:00

3

的問題不是在JavaScript(按你的原題),它在輸出JSON,你需要輸出格式正確的JSON,如果它看起來像{u'food': 90, u'cargo': 70, u'fuel': 50},self.response.out.write(info)沒有做。 (jsonlint.com是非常方便的驗證JSON文本。)

我沒有太大的蟒蛇頭(其實,我不是蟒蛇頭的話),但我想你想更換

self.response.out.write(info) 

json.dump(info, self.response) 

..或者類似(上述假定self.response「......一個.write() - 支持類文件對象...」),基於this reference

+0

我想爲了像你一樣使用'self.response.out',你需要'json.dump',它寫入類文件對象,而不是'json.dumps',它返回一個字符串。 – nrabinowitz 2012-03-20 16:48:38

+0

@nrabinowitz:謝謝,修正。 – 2012-03-20 16:49:31

+0

@downvoter:我會感興趣的是爲什麼你找到這個答案「沒有用」(使用downvote按鈕上的工具提示的措詞)。 – 2012-03-20 17:29:05