将 GitHub api 与 Python dict“解析 JSON 时出现问题”一起使用时出现问题

Sha*_*mad 1 python json github-api python-3.x python-requests

我正在尝试使用 GitHub api 来创建新文件。根据文档

这可以通过 PUT 请求来完成。

我正在使用 requests 包来发出请求。GitHub api 端点接受有效的 json 对象作为输入,即字符串位于双引号内。

我的数据具有以下格式 -

{
  'message': 'Updated learn.md',
  'content': 'ZW51bTM0PT0xLjEuNAotZSBnaXQraHR0cHM6Ly9naXRodWIuY29tL29wZW50b2svT3BlbnRvay1QeXRob24tU0RLLmdpdEAwMzU4YTI0ZDM0ZTkzMjVjYzRhODNhYmQxZTVjMGJmYzQ2M2ZkMjYwI2VnZz1vcGVudG9rCnB5dHo9PTIwMTYuNApyZXF1ZXN0cz09Mi4xMC4wCgo=',
  'branch': 'master'
}
Run Code Online (Sandbox Code Playgroud)

由于我以 Python 字典的形式放置数据,因此它带有单引号,但 GitHub 不接受它,并给出“解析 JSON 时出现问题”的 400 响应,如下所示

{
  "message": "Problems parsing JSON",
  "documentation_url": "https://developer.github.com/v3/repos/contents/#update-a-file"
}
Run Code Online (Sandbox Code Playgroud)

我已经验证问题是因为仅使用邮递员发出 PUT 请求时的引号,在这种情况下它是成功的。

正确的数据如下所示

{
  "message": "Updated learn.md",
  "content": "ZW51bTM0PT0xLjEuNAotZSBnaXQraHR0cHM6Ly9naXRodWIuY29tL29wZW50b2svT3BlbnRvay1QeXRob24tU0RLLmdpdEAwMzU4YTI0ZDM0ZTkzMjVjYzRhODNhYmQxZTVjMGJmYzQ2M2ZkMjYwI2VnZz1vcGVudG9rCnB5dHo9PTIwMTYuNApyZXF1ZXN0cz09Mi4xMC4wCgo=",
  "branch": "master"
}
Run Code Online (Sandbox Code Playgroud)

这是我拨打电话的方式

def put_data_to_github(self, url, data):
    headers = {}
    headers['Authorization'] = "token " + self.auth_token
    response = requests.put(url, data=data, headers=headers)
    return response
Run Code Online (Sandbox Code Playgroud)

如何在 Python 中创建有效的 JSON 对象以便 GitHub api 接受它?我怎样才能实现这个目标?

the*_*orn 6

发送之前必须将数据转换为 json。

import json
...
response = requests.put(url, data=json.dumps(data), headers=headers)
Run Code Online (Sandbox Code Playgroud)