我的龙卷风应用程序通过HTTP请求的身体接受POST数据龙卷风request.body
在我的处理程序我能够获得请求
def post(self):
data = self.request.body
我得到的数据是在从STR的(字典)
有没有办法以Python字典的形式接收这些数据?
我不想在服务器端使用eval
将此字符串转换为Python字典。
我的龙卷风应用程序通过HTTP请求的身体接受POST数据龙卷风request.body
在我的处理程序我能够获得请求
def post(self):
data = self.request.body
我得到的数据是在从STR的(字典)
有没有办法以Python字典的形式接收这些数据?
我不想在服务器端使用eval
将此字符串转换为Python字典。
您正在收到JSON字符串。 与JSON模块
import json
def post(self):
data = json.loads(self.request.body)
欲了解更多信息对其进行解码:http://docs.python.org/2/library/json.html
在Python3中,您必须解码原始字符串,例如。 'json.loads(self.request.body.decode('utf-8'))' – 2014-04-17 11:35:38
您现在可以使用'tornado.escape.json_decode(self.request.body)'来处理所有的解码。 – 2016-11-21 11:55:43
请注意,使用'tornado.escape'包装器到'json.loads'意味着你将无法使用'cls'或'parse _...'kwargs自定义/重写'JSONDecoder'。 (这是使用互补的'tornado.escape.json.encode'来封装'json.dumps'的更多问题,但在这里仍然值得一提。) – cowbert 2018-01-16 00:14:52
我想我也有类似的问题,当我在解析请求龙卷风。尝试使用urllib.unquote_plus模块:
import urllib
try:
import simplejson as json
except ImportError:
import json
data = json.loads(urllib.unquote_plus(self.request.body))
我的代码有两种不同格式的要求有所准备,所以我不喜欢的东西:
try:
json.loads(self.request.body)
except:
json.loads(urllib.unquote_plus(self.request.body))
我很好奇答案是什么,所以让我知道这是否有帮助(或者你是否在聊天中发现它)。我几乎肯定这是因为它是由网址编码的。 – Mitch 2013-06-24 18:35:13
逃离帮助我在这里。 – RandomInsano 2014-08-15 20:55:11
对于python3,它是'urllib.parse.unquote_plus()' – NuclearPeon 2015-05-13 01:47:22
作为替代Eloim的回答,龙卷风提供“逃离/消除HTML,JSON,URL和其他”的tornado.escape。使用它应该给你你想要什么:
data = tornado.escape.json_decode(self.request.body)
最好的办法,我在龙卷风解析机身内置httputil
多输入(如复选框,表格等)良好的工作。 如果提交元素在字典返回值列表中具有相同的名称。
工作样本:
import tornado.httputil
def post(self):
file_dic = {}
arg_dic = {}
tornado.httputil.parse_body_arguments('application/x-www-form-urlencoded', self.request.body, arg_dic, file_dic)
print(arg_dic, file_dic) # or other code`
如果使用webapp2的,它使用自己的JSON演员。 (解码) http://webapp2.readthedocs.io/en/latest/_modules/webapp2_extras/json.html
data = json.decode(self.request.body)
v = data.get(key)
self.response.write(v)
例如我的帖子关键是 'postvalue'
data = json.decode(self.request.body)
v = data.get('postvalue')
self.response.write(v)
怎么样
bind_args = dict((k,v[-1]) for k, v in self.request.arguments.items())
虽然这段代码可能回答这个问题,但提供关于如何和/或为何解决问题的附加上下文会提高答案的长期价值。 – 2017-05-27 11:01:26
这可能是一个JSON字符串。 – Blender 2013-05-08 23:04:44
有没有办法将这个json字符串转换成python字典而不使用eval。 – 2013-05-08 23:07:22
这个json字符串涉及的空格不包含其他json库将其转换为python字典 – 2013-05-08 23:08:24