2017-09-19 11 views
1

Pythonで単純なWebsocketsサーバーを使用していて、Androidアプリケーションクライアントからメッセージを受信しましたが、JSONでクライアントからメッセージペイロードを作成しようとしましたが、それはString内にあるときだけ動作します。私が見つけた 一つの解決策は、JSON形式のメッセージ文字列が、維持することです:PythonでJSON形式の文字列を読む

 try { 
     json.put("name", "Jack"); 
     json.put("age", "24"); 
     message = json.toString(2); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
webSocket.send(message); 

JavascriptをJSON.stringify(message) に触発され、私は、サーバー上のメッセージを印刷し、 ​​

私の質問をフォーマットしているように見えます受信時にサーバー上のJSONに戻すにはどうすればよいですか?

私はこの方法で試してみました:Pythonの:

def on_message(self,message): 
    data = json.loads(message) 
    self.write_message(data['name']) 

を、私はこのエラーを得た:

ERROR:tornado.application:Uncaught exception in/
Traceback (most recent call last): 
    File "/usr/local/lib/python3.4/dist-packages/tornado/websocket.py", line 494, in _run_callback 
    result = callback(*args, **kwargs) 
    File "index.py", line 24, in on_message 
    data = json.loads(message) 
    File "/usr/lib/python3.4/json/__init__.py", line 318, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python3.4/json/decoder.py", line 343, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib/python3.4/json/decoder.py", line 361, in raw_decode 
    raise ValueError(errmsg("Expecting value", s, err.value)) from None 
ValueError: Expecting value: line 1 column 1 (char 0) 
+2

['' json''](https://docs.python.org/3/library/json.html)のドキュメントでは、jsonのエンコードとデコードの例を示しています。つまり、jsonから文字列への変換、またはその逆の例です。 –

+0

'json.loads()'に与えられた 'message'の値を表示すると非常に便利です。 – norok2

+0

実際に関数内から印刷しようとするべきです。 'message'の空の文字列値で呼び出すようです。 たとえば、 'json.loads( '')'はインストール時に非常に似たエラーを出します。 – norok2

答えて

1

あなたはjson Pythonパッケージを使用する必要があります。 JSONを取得するには、単にimport jsonjson.dumps(message)を実行します。

+0

私は試しましたが、うまくいかず、エラーが表示されました。 – Hussein

1

このようなものはあなたのために働くのでしょうか?

import json 

# assume this is the JSON you receive 
text = json.dumps(dict(name='Jack', age='24')) 

# show the text to be converted 
print(text) 
# outputs: {"name": "Jack", "age": "24"} 

# load a string and convert to Python object 
# see `json` module more for details 
obj = json.loads(text) 
+0

私は試しましたが、うまくいきませんでした。私はそのエラーで質問を更新しました。 – Hussein

+0

'message'の値を出力できますか? – norok2

+0

私はそれを送ることができます。しかし、私はあなたが表示することができれば、それを再びJSON – Hussein

1

これはあなた

+0

私は試しましたが、うまくいかず、エラーが表示されました。 – Hussein

0

を助ける

希望は、私はこの方法を試してみましたが、それがために働いたあなたはJSON形式のデータを取得するPythonでデータ変数で

import json 
data = json.loads(your_var) 

をJSONパッケージを使用します私はastを使用してメッセージを辞書に変換し、私が望むように新しいメッセージを使用しました:

formattedMessage = ast.literal_eval(format(message)) 
    self.write_message(formattedMessage["name"]) 
+1

ソースが 'json'のテキストの場合、非常に壊れやすいコードが生成されます。私はむしろ適切なJSONパーサが動作することを確認したいと思います。 'simplejson'は、より有益なエラーメッセージを生成することが知られています。 – norok2

関連する問題