在Python中读取JSON格式的字符串

时间:2017-09-19 13:17:33

标签: python json string python-3.x

我在python中有一个简单的Websockets服务器,它接收来自Android应用程序客户端的消息,我试图用JSON从客户端制作消息有效负载,但我觉得。它只在String中使用时才有效。 我找到的一个解决方案是使用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)的启发 我在服务器上打印了这条消息,似乎是格式化的 enter image description here

我的问题是如何在收到服务器时将其反转为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)

4 个答案:

答案 0 :(得分:1)

您应该使用json Python包。要拥有JSON,您只需执行import jsonjson.dumps(message)

答案 1 :(得分: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) 

答案 2 :(得分:1)

在python中使用Json包

import json
data = json.loads(your_var)

在数据变量中,您将获得json格式数据

希望这会对你有所帮助

答案 3 :(得分:0)

我尝试了这种方式并且它对我有用,我使用ast将消息转换为字典,然后按照我的意愿使用新消息:

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