2016-05-12 10 views
1

JSONデータの解析に関する問題が発生していますが、わかりません。Python 2.7でjson.loadsを使用すると、dictの代わりにunicodeオブジェクトが返されます

{"action": "something"} 

私はのWebSocketに送信しています方法は次のとおりです:

sock.send(JSON.stringify($('textfield').value)); 
私はJavaScriptからトルネード用WebSocketに接続し、次のデータを送信してい

は、テキストフィールドに入力されました

print("Message type: " + str(type(message)) + ", content: " + message) 

parsed_message = json.loads(message) 

print("Parsed message type: " + str(type(parsed_message)) + ", content: " + parsed_message) 

そして目:

は今、Pythonで、私は私のWebsocketHandlerに次のコード:: ON_MESSAGE()を持っていますこのからの電子出力は次のようになります。

Message type: <type 'unicode'>, content: "{\"action\":\"START_QUESTION_SELF\"}" 
Parsed message type: <type 'unicode'>, content: {"action":"START_QUESTION_SELF"} 

は今、私は第2のプリントメッセージがdictことを期待するだろうと私は、これが機能しない理由を把握することはできません。どんな助けでも大歓迎です。

+0

申し訳へJSONを設定するときに同じエラーがありました:{「アクション」 : "START_QUESTION_SELF"}は実際にはディクテーションです。 –

+0

あなたはpython2または3を使用していますか? –

+0

@ M.T、Python 2.7を使用しています。 – Revell

答えて

3

あなたがsock.send(JSON.stringify('{"action": "something"}'));を行うときに、あなたはそれが実際に引用符が含まれていることを確認することができますメッセージを印刷するとき、あなたがこの"{\"action\": \"something\"}"

を送信するので、それは動作しません。したがって、それはjson.loadsによって文字列として解釈されています。

最も簡単な解決策は再びjson.loadsを呼び出すことになります。

parsed_message = json.loads(json.loads(message)) 

あなたが本当にオブジェクトにテキストフィールドの値を変換を検討し、それにJSON.stringifyを使用しなければならないが。このような何か:

sock.send(JSON.stringify(JSON.parse($('textfield').value))); 
+0

を私はへのデータのの送信を変更しましたそして、今度はPythonの終わりを知りましょう。ありがとう! – Revell

+0

@Revell Huh。私はちょうど非常に同じ解決策を提案しました:) – Alik

0

私はあなたの文字列のように思えるが(\")エスケープ、ひいてはjson.loadsはプレーンな文字列としてそれを見ています。
のエスケープ解除を試みてからjson.loadsに電話してください。

私は誤解が、コンテンツきた場合、私はモデルでJSONFieldを使用して、この

content='{"content":"Hello A","numbers":[1,2,3,4]}' 
# json.loads(model.content) --> type 'str' 

代わりの

content={"content":"Hello A","numbers":[1,2,3,4]} 
# json.loads(model.content) --> type 'dict' 
関連する問題