2016-02-04 48 views
1

这里是我要发布的数据,的Python的request.POST不接受解释

这是字典答案的印版:

{'Emails': set([u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected] ', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected] ', u' [email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u"elberta.o'[email protected]", u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u' [email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', None, u'[email protected] ', u'[email protected]']), '# of Emails per Domain': {u'@hotmail.com': 22, u'@yahoo.com': 18, u'@gmail.com': 18}, 'April Users': 70} 

当我运行:

r = requests.post('https://9g9xhayrh5.execute-api.us-west-2.amazonaws.com/test/data', data = answers) 

我收到此错误:

{"message": "Could not parse request body into json: Unrecognized token \'Emails\': was expecting (\'true\', \'false\' or \'null\')\n at [Source: [[email protected]; line: 1, column: 8]"} 

不知道这是什么意思,我试图解析数据到JSON,为什么它不喜欢'电子邮件'字符串?

如果我添加那样json.dump代码我得到:

TypeError 

TypeError: set([u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected] ', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected] ', u' [email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u"elberta.o'[email protected]", u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u' [email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', u'[email protected]', None, u'[email protected] ', u'[email protected]']) is not JSON serializable 
+0

JSON不知道'set'。此外,你绝对不应该在这里发布这些电子邮件地址。 – L3viathan

+0

我假设这些都是假的,但好的电话 –

+0

试试'answers ['Emails'] = list(answers ['Emails'])'。 – L3viathan

回答

1

TypeError: set([ ... ]) is not JSON serializable

集不是JSON序列化。您可以将所有的集合转换成列出了词典:

answers = {key: list(value) if isinstance(value, set) else value 
      for key, value in answers.items()} 

(请注意,这不会对嵌套的字典上班的)。

或者,使用将处理设置序列化的custom JSON encoder


转储和装载它带回json通常有助于调试:

import json 

answers = json.loads(json.dumps(answers)) 
r = requests.post('https://9g9xhayrh5.execute-api.us-west-2.amazonaws.com/test/data', data=answers) 
+0

不错的建议,我试过这种方法,但我得到一个TypeError –

+0

@AdamWeitzman请发布回溯,这可能会给我们一个线索是怎么回事。谢谢! – alecxe

+0

张贴在上面,我认为这是与该设置有关... ....但不知道 –

1

这工作:

import requests 
import json 
answers = {} #... 
url = "..." 
answers['Emails'] = list(answers['Emails']) 
r = requests.post(url, data=json.dumps(answers)) 

其他方式不工作的原因是,默认情况下请求使用内容类型application/x-www-form-urlencoded而不是JSON发送数据。使用请求库

r = requests.post(url, json=answers) 

调试代码,你可以look at a prepared request发送之前:

要改变这种状况,你也可以使用json,而不是data参数。