请求JSON格式不正确

时间:2013-06-27 08:54:26

标签: python json api rest paypal

我正在尝试重新创建此page

上提供的示例

当然我正在使用我的有效数据更改client_id,密码,信用卡等...(我没有按原样复制粘贴示例)。

您可以看到我的完整代码here(我使用 * ** 隐藏了合理的数据。)

我可以毫无问题地获得令牌,但是当我发布付款请求时,我得到了回复:

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格式不正确:( 有人可以帮帮我吗?谢谢!

2 个答案:

答案 0 :(得分:7)

这是你的代码:

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字符串s,您可以将其转换为Python对象并将其发布到服务器。正如the docs所述,如果您将dict作为data传递,则会进行表单编码,而不是JSON编码。如果您想要任何其他格式的数据,您应该自己编码,如示例所示:

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

由于您已经拥有JSON编码的字符串s,因此您可以发送该字符串。

答案 1 :(得分:2)

你完全误解了应该传递给requests.post()方法的内容。 http://docs.python-requests.org/en/latest/user/quickstart.html#more-complicated-post-requests

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