龙卷风请求.体

Joe*_*mes 26 python tornado python-2.7

我的Tornado应用程序通过http正文请求接受POST数据

在我的处理程序中,我能够得到请求

def post(self):
    data = self.request.body
Run Code Online (Sandbox Code Playgroud)

我得到的数据来自str(字典)

有没有办法以Python字典的形式接收这些数据?

我不想eval在服务器端使用将此字符串转换为Python字典.

Far*_*ray 39

作为Eloim答案的替代品,Tornado 为"逃避/取消HTML,JSON,URL和其他" 提供了tornado.escape.使用它应该给你你想要的东西:

data = tornado.escape.json_decode(self.request.body)
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用 - 我收到错误:在 json_decode return json.loads(to_basestring(value)) File "/usr/lib/python3.6/json/__init__.py", line 354, in loading return _default_decoder .decode(s) 文件“/usr/lib/python3.6/json/decoder.py”,第 339 行,在解码对象中,end = self.raw_decode(s, idx=_w(s, 0).end() ) 文件 "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 列 1(字符 0) (2认同)

Elo*_*ims 20

您正在接收JSON字符串.使用JSON模块解码它

import json

def post(self):
    data = json.loads(self.request.body)
Run Code Online (Sandbox Code Playgroud)

有关更多信息:http://docs.python.org/2/library/json.html

  • 在Python3中,你必须解码原始的字节串,例如.`json.loads(self.request.body.decode( 'UTF-8'))` (14认同)
  • 您现在可以使用`tornado.escape.json_decode(self.request.body)`,它将为您处理所有解码。 (2认同)