Проблема с использованием GitHub API с Python dict "Проблемы парсинга JSON" - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь использовать API GitHub для создания нового файла.Согласно документации

это можно сделать с помощью запроса PUT.

Я использую пакет запросов для выполнения запроса.Конечная точка API GitHub принимает действительные объекты json в качестве входных данных, т. Е. Где строки находятся в двойных кавычках.

Мои данные имеют следующий формат -

{
  'message': 'Updated learn.md',
  'content': 'ZW51bTM0PT0xLjEuNAotZSBnaXQraHR0cHM6Ly9naXRodWIuY29tL29wZW50b2svT3BlbnRvay1QeXRob24tU0RLLmdpdEAwMzU4YTI0ZDM0ZTkzMjVjYzRhODNhYmQxZTVjMGJmYzQ2M2ZkMjYwI2VnZz1vcGVudG9rCnB5dHo9PTIwMTYuNApyZXF1ZXN0cz09Mi4xMC4wCgo=',
  'branch': 'master'
}

Поскольку я помещаю данные, находящиеся вформа словаря Python содержит одинарные кавычки, но GitHub не принимает его и выдает ответ 400 «Проблемы синтаксического анализа JSON», как показано ниже

{
  "message": "Problems parsing JSON",
  "documentation_url": "https://developer.github.com/v3/repos/contents/#update-a-file"
}

Я подтвердил, что проблема заключается виз-за кавычек только с помощью почтальона для выполнения запроса PUT, в этом случае он был успешным

Правильные данные показаны ниже

{
  "message": "Updated learn.md",
  "content": "ZW51bTM0PT0xLjEuNAotZSBnaXQraHR0cHM6Ly9naXRodWIuY29tL29wZW50b2svT3BlbnRvay1QeXRob24tU0RLLmdpdEAwMzU4YTI0ZDM0ZTkzMjVjYzRhODNhYmQxZTVjMGJmYzQ2M2ZkMjYwI2VnZz1vcGVudG9rCnB5dHo9PTIwMTYuNApyZXF1ZXN0cz09Mi4xMC4wCgo=",
  "branch": "master"
}

Вот как я делаю вызов

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

Как я могу сделать допустимые объекты JSON в Python, чтобы GitHubAPI принимает это?Как мне этого добиться?

1 Ответ

1 голос
/ 21 апреля 2019

Вы должны преобразовать свои данные в json перед отправкой ..

import json
...
response = requests.put(url, data=json.dumps(data), headers=headers)
...