Google App Engine:Python:WebOb:如何以JSON格式获取POST数据?

时间:2013-10-06 05:02:46

标签: python json google-app-engine webapp2 webob

我正在Google App Engine平台上构建一个网络应用程序,它使用webapp2,它使用WebOb。我想POST一些JSON格式的数据,包括嵌套数组和字典。 E.g:

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

但是,在服务器端,数据以平面" MultiDict"对象,而不是我POST编辑的原始嵌套JSON对象。 E.g:

>>> 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等效数据,以便我可以轻松地操作和检查数据?

2 个答案:

答案 0 :(得分:2)

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

$.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)

答案 1 :(得分:1)

使用json.dumps(yourdata) 不要忘记将标题Content-Type更改为application / json

headers = {
"Content-Type": "application/json"
}
session.post(<url>, data=json.dumps(yourdata))