我的龍捲風應用程序通過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