1

有没有办法轻松提取 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.....

我只想能够调用一个函数来提取从 {"Data":...... 部分开始的主体的 json 部分。

我可以调用一个简单的函数来执行此操作吗?

4

3 回答 3

2

这取决于它在提交之前在浏览器端是如何编码的,但通常你会得到这样的 POST 数据:

jsonstr = self.request.POST["Data"]

如果这不起作用,您可能想向我们提供一些有关“数据”如何编码到客户端的 POST 数据中的信息。

于 2012-06-20T01:17:31.503 回答
2

有个误区,你给我们看的字符串不是json数据,看起来像是POST体。您必须使用cgi.parse_multipart之类的东西来解析正文。然后你可以像 schmid00 回答的那样解析 json。但是,您只解析数据而不是正文。

在这里您可以找到显示如何使用 cgi.FieldStorage 解析 POST 正文的工作代码。这个问题也在这里得到回答。.

于 2012-06-19T22:08:59.637 回答
0

你可以试试:

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

于 2012-06-19T22:15:48.370 回答