2017-09-19 1 views
1

파이썬으로 간단한 웹 소켓 서버를 가지고 있고, 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); 

자바 스크립트 JSON.stringify(message) 에서 영감을 내가 서버에 메시지를 인쇄하고는 enter image description here

내 질문을 포맷 할 것 서버에서받은 JSON으로 되돌릴 수있는 방법은 무엇입니까? 파이썬 :

나는이 방법으로 시도

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에서 string으로 또는 그 반대로 간다. –

+0

'json.loads()'에 주어진'message' 값을 출력하는 것은 매우 도움이 될 것입니다. – norok2

+0

실제로 함수 내에서 인쇄 해보십시오. 'message'에 대해 빈 문자열 값으로 호출하는 것 같습니다. 예를 들어'json.loads ('')'는 설치 과정에서 매우 유사한 오류를 발생시킵니다. – norok2

답변

1

당신은 json 파이썬 패키지를 사용해야합니다. 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 형식의 데이터를 얻을 데이터 변수에 파이썬

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