有没有办法轻松提取POST请求正文中的json数据部分? 例如,如果某人使用带有json数据的表单正文发布到www.example.com/post,我的GAE服务器将通过调用来接收请求:
jsonstr = self.request.body
然而,当我看到jsonstr时,我会得到类似的东西:
str: \r\n----------------------------8cf1c255b3bd7f2\r\nContent-Disposition: form-data;
name="Actigraphy"\r\n Content-Type: application/octet-
stream\r\n\r\n{"Data":"AfgCIwHGAkAB4wFYAZkBKgHwAebQBaAD.....
我只是希望能够调用一个函数来提取身体的json部分,该部分从{"数据":......部分开始。
我可以打电话来做这个简单的功能吗?
答案 0 :(得分:2)
有一个误解,你告诉我们的字符串不是json数据,它看起来像一个POST体。你必须用cgi.parse_multipart之类的东西来解析身体。 然后你可以像aschmid00一样解析json。但是,您只需解析数据而不是正文。
您可以在这里找到working code that shows how to use cgi.FieldStorage for parsing the POST body。 这个问题也是answered here.。
答案 1 :(得分:2)
这取决于在提交之前它在浏览器端的编码方式,但通常你会得到这样的POST数据:
jsonstr = self.request.POST["Data"]
如果这不起作用,您可能想要提供一些有关"数据"被编码到客户端的POST数据中。
答案 2 :(得分:1)
你可以尝试:
import json
values = 'random stuff .... \r\n {"data":{"values":[1,2,3]}} more rnandom things'
json_value = json.loads(values[values.index('{'):values.rindex('}') + 1])
print json_value['data'] # {u'values': [1, 2, 3]}
print json_value['data']['values'] # [1, 2, 3]
但这是危险并且需要相当多的假设,我不确定您使用的是哪个框架,瓶子,瓶子等等,请使用POST
的相应调用
根据框架检索值,如果你确实使用了它。
我认为你的意思是self.request.get("Data")
如果你自己使用GAE。
https://developers.google.com/appengine/docs/python/tools/webapp/requestclass#Request_get https://developers.google.com/appengine/docs/python/tools/webapp/requestclass#Request_get_all