Python request.post不接受字典

Python request.post不接受字典,python,api,request,Python,Api,Request,这是我想发布的数据 这是字典答案的印刷版本: {'Emails': set([u'vernon.fadel@denesik.com', u'helyn67@cruickshankmckenzie.com', u'tryan@fishercremin.com', u'cecilia.kerluke@gmail.com', u'sonia.ruecker@schmidt.info', u'reichel.tamatha@gmail.com', u'johntyree69@greendale.edu'

这是我想发布的数据

这是字典答案的印刷版本:

{'Emails': set([u'vernon.fadel@denesik.com', u'helyn67@cruickshankmckenzie.com', u'tryan@fishercremin.com', u'cecilia.kerluke@gmail.com', u'sonia.ruecker@schmidt.info', u'reichel.tamatha@gmail.com', u'johntyree69@greendale.edu', u'gail34@reichel.com', u'birdman@quitzon.net ', u'onolan@gmail.com', u'lindgren.merry@howe.com', u'wilderman.nyree@heidenreich.com', u'yschneider@jacobson.biz', u'nakia.larkin@gmail.com', u'vblanda@gmail.com', u'pkoch@yahoo.com', u'ygoyette@yahoo.com', u'wiegand.lynnette@beer.com', u'ubradtke@hotmail.com', u'troy67@yahoo.com', u'eileen.gusikowski@oreilly.info', u'glubowitz@yahoo.com', u'inolan@hotmail.com', u'lfranecki@hotmail.com', u'miller.hana@gmail.com', u'morissette.lalla@kuhicmuller.com', u'harber.gisele@gmail.com', u'odalys.dubuque@ebertrunte.net', u'jones.kyree@auer.net', u'adams77@yahoo.com', u'parisian.linda@hotmail.com', u'channing.cremin@toy.org', u'chad.armstrong@yahoo.com', u'isaac.nolan@hotmail.com', u'kozey.luciana@collins.biz', u'cstehr@keebler.com', u'jquitzon@gmail.com', u'hhirthe@yahoo.com', u'emilia16@block.com', u'arice@greenholtconsidine.com', u'tobin.schuppe@gmail.com', u'wyman.junious@gmail.com', u'mrath@ruecker.com ', u' johns.sonji@lakinwalker.info', u'thiel.cassie@hodkiewicz.info', u'fjaskolski@hotmail.com', u'mosciski.destany@hotmail.com', u'vrippin@gmail.com', u'zschuppe@hotmail.com', u'clotilda26@goodwinlind.info', u'lizette.walker@stanton.com', u'hettinger.kamari@hotmail.com', u'emelia54@yahoo.com', u'terry.ezekiel@hotmail.com', u'douglyass.dickinson@hotmail.com', u'zulauf.olympia@gmail.com', u'maxxx.waters@sauer.biz', u'abshire.charmaine@schusterlabadie.com', u'kuvalis.dewitt@wolfschaefer.com', u"elberta.o'connell@yahoo.com", u'henery76@yahoo.com', u'britny60@gmail.com', u'ed.hilpert@hansen.com', u'burnice.feest@yahoo.com', u' ybartoletti@littel.biz', u'sharde.murazik@hotmail.com', u'angelica.klocko@ankunding', u'brandi.klein@hotmail.com', u'dollie49@hotmail.com', u'mrath@ruecker.com', u'hayley27@koelpin.com', u'georgiann.mertz@moen.net', u'floretta39@volkmanrosenbaum.net', u'vicy.predovic@gmail.com', u'raven53@yahoo.com', u'fmann@yahoo.com', u'sdaugherty@gmail.com', u'gerlach.villa@koelpinfeeney.net', u'alysha.gibson@hotmail.com', u'hoy.kozey@gmail.com', u'cheyenne84@lehneroconner.com', u'uoberbrunner@hotmail.com', u'hhaag@swaniawskiterry.info', u'infant80@yahoo.com', u'manilla.west@hotmail.com', u'hconsidine@bernhardhills.info', u'dean94@hotmail.com', u'bahringer.karl@yahoo.com', u'crona.meredith@gmail.com', u'letta.larkin@quitzon.net', u'owindler@strosin.info', u'shanahan.anders@yahoo.com', u'mclaughlin.desi@gmail.com', u'erdman.icy@hotmail.com', u'salvatore21@hintz.com', u'jkoch@hotmail.com', u'red.beatty@yahoo.com', u'helma91@hotmail.com', u'arland.koepp@hotmail.com', u'ymoore@cristhalvorson.org', u'woodie.crooks@kozey.com', None, u'jchamplin@hotmail.com ', u'walter.elwyn@yahoo.com']), '# 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: [B@311a7237; line: 1, column: 8]"}
根本不知道这意味着什么,我已经尝试将数据解析为json,为什么它不喜欢“Email”字符串

如果我添加json.dump代码,我会得到:

TypeError

TypeError: set([u'vernon.fadel@denesik.com', u'helyn67@cruickshankmckenzie.com', u'tryan@fishercremin.com', u'cecilia.kerluke@gmail.com', u'sonia.ruecker@schmidt.info', u'reichel.tamatha@gmail.com', u'johntyree69@greendale.edu', u'gail34@reichel.com', u'birdman@quitzon.net ', u'onolan@gmail.com', u'lindgren.merry@howe.com', u'wilderman.nyree@heidenreich.com', u'yschneider@jacobson.biz', u'nakia.larkin@gmail.com', u'vblanda@gmail.com', u'pkoch@yahoo.com', u'ygoyette@yahoo.com', u'wiegand.lynnette@beer.com', u'ubradtke@hotmail.com', u'troy67@yahoo.com', u'eileen.gusikowski@oreilly.info', u'glubowitz@yahoo.com', u'inolan@hotmail.com', u'lfranecki@hotmail.com', u'miller.hana@gmail.com', u'morissette.lalla@kuhicmuller.com', u'harber.gisele@gmail.com', u'odalys.dubuque@ebertrunte.net', u'jones.kyree@auer.net', u'adams77@yahoo.com', u'parisian.linda@hotmail.com', u'channing.cremin@toy.org', u'chad.armstrong@yahoo.com', u'isaac.nolan@hotmail.com', u'kozey.luciana@collins.biz', u'cstehr@keebler.com', u'jquitzon@gmail.com', u'hhirthe@yahoo.com', u'emilia16@block.com', u'arice@greenholtconsidine.com', u'tobin.schuppe@gmail.com', u'wyman.junious@gmail.com', u'mrath@ruecker.com ', u' johns.sonji@lakinwalker.info', u'thiel.cassie@hodkiewicz.info', u'fjaskolski@hotmail.com', u'mosciski.destany@hotmail.com', u'vrippin@gmail.com', u'zschuppe@hotmail.com', u'clotilda26@goodwinlind.info', u'lizette.walker@stanton.com', u'hettinger.kamari@hotmail.com', u'emelia54@yahoo.com', u'terry.ezekiel@hotmail.com', u'douglyass.dickinson@hotmail.com', u'zulauf.olympia@gmail.com', u'maxxx.waters@sauer.biz', u'abshire.charmaine@schusterlabadie.com', u'kuvalis.dewitt@wolfschaefer.com', u"elberta.o'connell@yahoo.com", u'henery76@yahoo.com', u'britny60@gmail.com', u'ed.hilpert@hansen.com', u'burnice.feest@yahoo.com', u' ybartoletti@littel.biz', u'sharde.murazik@hotmail.com', u'angelica.klocko@ankunding', u'brandi.klein@hotmail.com', u'dollie49@hotmail.com', u'mrath@ruecker.com', u'hayley27@koelpin.com', u'georgiann.mertz@moen.net', u'floretta39@volkmanrosenbaum.net', u'vicy.predovic@gmail.com', u'raven53@yahoo.com', u'fmann@yahoo.com', u'sdaugherty@gmail.com', u'gerlach.villa@koelpinfeeney.net', u'alysha.gibson@hotmail.com', u'hoy.kozey@gmail.com', u'cheyenne84@lehneroconner.com', u'uoberbrunner@hotmail.com', u'hhaag@swaniawskiterry.info', u'infant80@yahoo.com', u'manilla.west@hotmail.com', u'hconsidine@bernhardhills.info', u'dean94@hotmail.com', u'bahringer.karl@yahoo.com', u'crona.meredith@gmail.com', u'letta.larkin@quitzon.net', u'owindler@strosin.info', u'shanahan.anders@yahoo.com', u'mclaughlin.desi@gmail.com', u'erdman.icy@hotmail.com', u'salvatore21@hintz.com', u'jkoch@hotmail.com', u'red.beatty@yahoo.com', u'helma91@hotmail.com', u'arland.koepp@hotmail.com', u'ymoore@cristhalvorson.org', u'woodie.crooks@kozey.com', None, u'jchamplin@hotmail.com ', u'walter.elwyn@yahoo.com']) is not JSON serializable
TypeError:set([…])不可JSON序列化

集合不可JSON序列化。您可以将所有集合转换为字典中的列表:

answers = {key: list(value) if isinstance(value, set) else value
           for key, value in answers.items()}
(请注意,这不适用于嵌套字典)

或者,使用将处理集合序列化的


使用
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)
这项工作:

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

要改变这一点,还可以使用
json
而不是
data
参数:

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


要使用请求库调试代码,您可以在发送之前进行调试。

JSON不知道
set
。另外,你绝对不应该在这里发布这些电子邮件地址。我假设这些地址是假的,但很好。请尝试
answers['Emails']=list(answers['Emails'])
。相同的错误无法识别的标记'email',对不起,我错了,但是我现在解决了这个问题:如果你自己对JSON编码,然后手工处理
请求,它就可以工作。将一个JSON编码的字符串作为
数据
参数发布。很好的建议,我尝试了这个方法,但我得到了一个TypeError@AdamWeitzman请发布追踪,这可能会给我们一个线索。谢谢@阿达姆维茨曼:没错,他更新了答案。希望有帮助。hmmm尝试手动完成,但运气不佳,我将尝试JSONencoding@AdamWeitzman是的,因为字典里还有其他的集合,更新了第一个选项。希望有帮助。