首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:Python: WebOb:如何获得JSON格式的POST数据?

:Python: WebOb:如何获得JSON格式的POST数据?
EN

Stack Overflow用户
提问于 2013-10-06 05:02:45
回答 2查看 2.9K关注 0票数 2

我正在平台上构建一个web应用程序,该平台使用webapp2,使用WebOb。我想POST一些JSON格式的数据,包括嵌套数组和字典。例如:

代码语言:javascript
复制
$.post('/addvendor', {'vendor': {'name': 'test', 'description': 'a good company', 'tags':['foo', 'bar']}}, function(data){console.log(data)}, 'application/json')

但是,在服务器端,数据作为一个扁平的"MultiDict“对象输入,而不是像我POST编辑的原始嵌套JSON对象那样。例如:

代码语言:javascript
复制
>>> print self.request.params.items()
[(u'vendor[name]', u'test'), (u'vendor[description]', u'a good company'), (u'vendor[tags][]', u'foo'), (u'vendor[tags][]', u'bar')]

这个对象很难解析。在我的服务器代码中,是否有一种方法可以在服务器上以标准JSON格式获取相同的数据,或者至少使用嵌套字典和数组获得Python等效的数据,以便我可以轻松地操作和检查数据?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-06 07:22:43

(使用jayhendren的帮助更新)您应该使用$.ajax并手动设置contentType='application/json;charset=utf-8‘,因为$.post使用默认的“application/x form-urlencoded;”内容类型。此外,还需要使用JSON.stringify手动将数据编码为JSON-string:

代码语言:javascript
复制
$.ajax({url:'/addvendor', 
        type: 'post', 
        data:JSON.stringify({'vendor': {'name': 'test', 'description': 'a good company', 'tags':['foo', 'bar']}}), 
        contentType:'application/json; charset=utf-8',
        dataType: "json",
        success:function(data){console.log(data)}})

...

print json.loads(self.request.body)
票数 2
EN

Stack Overflow用户

发布于 2013-10-07 11:49:29

使用json.dumps(您的数据)不要忘记将标题内容-类型更改为application/json

代码语言:javascript
复制
headers = {
"Content-Type": "application/json"
}
session.post(<url>, data=json.dumps(yourdata))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19205604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档