Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 请求JSON的格式不正确_Python_Json_Api_Rest_Paypal - Fatal编程技术网

Python 请求JSON的格式不正确

Python 请求JSON的格式不正确,python,json,api,rest,paypal,Python,Json,Api,Rest,Paypal,我正在尝试重新创建这个示例 当然,我正在更改客户id、密码、信用卡等。。。使用我的有效数据,我没有复制粘贴示例 你可以看到我用***隐藏的完整代码 我可以毫无问题地获得代币,但当我发布付款请求时,我会将其取回: In [11]: r2.text Out[11]: u'{"name":"MALFORMED_REQUEST","message":"The request JSON is not well formed.","information_link":"https://developer.p

我正在尝试重新创建这个示例

当然,我正在更改客户id、密码、信用卡等。。。使用我的有效数据,我没有复制粘贴示例

你可以看到我用***隐藏的完整代码

我可以毫无问题地获得代币,但当我发布付款请求时,我会将其取回:

In [11]: r2.text
Out[11]: u'{"name":"MALFORMED_REQUEST","message":"The request JSON is not well formed.","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#MALFORMED_REQUEST","debug_id":"*************"}'
我真的不明白为什么它说我的json格式不正确: 有人能帮我吗?谢谢

这是您的代码:

post_data = json.loads(s)

r2 = requests.post('https://api.sandbox.paypal.com/v1/payments/payment', headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token}, 
    data = post_data)
您有一个JSON字符串,可以将其转换为Python对象并将其发布到服务器。比如说,如果您将dict作为数据传递,它将进行表单编码,而不是JSON编码。如果您想要任何其他格式的数据,您应该自己对其进行编码,如示例所示:

>>> r = requests.post(url, data=json.dumps(payload))

既然您已经有了JSON编码的字符串s,您可以发送它。

您完全误解了应该传递给requests.post方法的内容


您正在尝试传递Python对象而不是JSON@Janne的答案是一个选项,但更方便的做法是将数据构建为Python对象,然后使用json.dumpsobj并将结果传递给requests.post。

有什么原因让您尝试手动而不是使用它?还有,为什么您要手动将s构建为json字符串,只是为了解析它,“不是一开始就创建一个dict吗?”abarnert说,他是否有理由手动创建dict并不重要。他可以从我们的答案中学习如何正确使用请求库。但是+1用于提供与PayPal交互的开箱即用解决方案。@ElmoVanKielmo:当然,学习如何使用请求、如何手动与web服务对话等都是对我评论的有效回答。@abarnert,正如我所说,你的评论非常有用。很高兴了解PayPal SDK。然而,这里的问题名为请求JSON格式不正确。稍后,Andrea可能不得不在没有SDK的情况下与webservice交谈,了解请求将是必不可少的。现在,我同意,他可以也可能应该使用PayPal SDK。它实际上不调用str,而是对数据进行表单编码。我编辑了答案来澄清这一点。否则,这一切都是正确的,而且是一个很好的答案。我是否总是需要征求那些对答案投反对票的人的意见?有建设性的批评是好的——这给了我一个学习的机会。最近,我看到很多没有评论的反对票,这让我很恼火。当你问他们时,你几乎从来没有得到评论。如果答案是好的,你通常会得到2-5张赞成票,但正如你所说,我更关心建设性的批评,而不是代表点。