使用python从post body请求中提取json数据

时间:2012-06-19 21:50:44

标签: python json google-app-engine extract http-post

有没有办法轻松提取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部分,该部分从{"数据":......部分开始。

我可以打电话来做这个简单的功能吗?

3 个答案:

答案 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