2012-03-20 8 views
2

私はフォームを作成し、送信ボタンをクリックすると、3つの値をjavascriptのdictに割り当て、処理するpythonスクリプトに送信します。 ! JSONエラーからpythonの出力で `u`文字を削除する

:{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スクリプト(私は「情報」の情報を読み、Googleのアプリエンジンにそれを記述しようとしています。

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

+1

[リスト内での削除](http://stackoverflow.com/questions/9773121/removing-u-in-list) – geoffspear

答えて

8

Python dictを印刷すると、多くの場合有効な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

+0

ありがとうございます。両者のパフォーマンスに違いはありますか? – nrabinowitz

+1

複雑なデータセットや大きなデータセットの場合は、「json.dump」を使用する方が効率的です。 –

3

問題があなたの元のタイトルあたりのJavaScript()ではありません、それはの出力にありますJSON。適切な形式で出力する必要がありますJSON{u'food': 90, u'cargo': 70, u'fuel': 50}のように見える場合は、self.response.out.write(info)は行っていません。 (jsonlint.comはJSONテキストを検証するために便利です。)

私のpython-ヘッド(実際には、私は全くのpython-頭はないよ)のあまりないんだけど、私はあなたが

self.response.out.write(info) 
を交換したいと思います

json.dump(info, self.response) 

..or類似有する

this referenceに基づいて、(上記self.responseが "... .write() -supportingファイルのようなオブジェクト..."であると仮定します)。

+0

あなたのように 'self.response.out'を使用するためには、文字列を返す 'json.dumps'ではなく、ファイルのようなオブジェクトに書き込む' json.dump'が必要です。 – nrabinowitz

+0

@nrabinowitz:ありがとう、修正済み。 –

+0

@downvoter:私はこの答えが「役に立たない」(downvoteボタンのツールチップからフレーズを使用するために)と思われる理由に興味があります。 –

関連する問題