Как передать файл или объект json в запросе POST, используя Python модуль 'запросы' - PullRequest
0 голосов
/ 27 апреля 2020

Я использую REST API сайта и в основном использую Python модуль «запросов» для получения json ответов. Цель запросов GET состоит в том, чтобы в конечном итоге получить ответ от пользовательской формы, который в итоге становится сложным json документом. Чтобы справиться с этим:

user_form_submission = requests.get('https://www.url/doc.json',
        auth = (api_key, secret),
        params = params)

python_obj = json.loads(user_form_submission.text)
trimmed_dict = python_obj['key'][0]['keys']

Для контекста это будет выглядеть как trimmed_dict в формате. json:

{
    "Date": { "value": "2020-04-26", "type": "date" },
    "Location": {
      "value": "Test ",
      "type": "text",
      "geostamp": "lat=34.00000, long=-77.00000, alt=17.986118, hAccuracy=65.000000, vAccuracy=10.000000, timestamp=2020-04-26T23:39:56Z"
    },
    "form": {
      "value": [
        {
          "form_Details": {
            "value": [
              {
                "code": {
                  "value": "0000000000",
                  "type": "barcode"
                },
                "Name": { "value": "bob", "type": "text" }
              }
            ],
            "type": "group"
          },
          "Subtotal": { "value": "4", "type": "decimal" },
          "form_detail2": {
            "value": [
              {
                "name": {
                  "value": "billy",
                  "type": "text"
                },
                "code": {
                  "value": "00101001",
                  "type": "barcode"
                },
                "Classification": {
                  "value": "person",
                  "type": "select1"
                },
                "Start_Time": { "value": "19:43:00", "type": "time" },
                "time": { "value": "4", "type": "decimal" }
                }
            ],
      "type": "subform"}
        }
    ]
    }
}

Теперь у меня есть часть json в котором содержится как полезное, так и бесполезное. С этого момента я могу передать этот объект в POST? Я старался изо всех сил подходить к нему и был отключен.

Понимание того, как я хочу go об этом, вот как я думал, что это будет go:

json_post = requests.post(' https://url/api/doc.json', 
        auth = (api_key, secret), 
        json = {
            "form_id" : 'https://url.form.com/formid',
            'payload':{
                 json.dumps(trimmed_dict)
             }})

Но, когда я делаю это, я получаю следующую ошибку -

    TypeError: Object of type set is not JSON serializable

Как я могу сделать sh этот дикт через этот POST? Если есть более эффективный способ сделать это, я очень открыт для предложений.

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Удалить лишнюю {} из полезной нагрузки. сама полезная нагрузка является ключом, и json.dumps(trimmed_dict) в качестве значения достаточно

json_post = requests.post(' https://url/api/doc.json', 
        auth = (api_key, secret), 
        json = {
            "form_id" : 'https://url.form.com/formid',
            "payload": json.dumps(trimmed_dict)
             })
1 голос
/ 27 апреля 2020

Попробуйте удалить фигурные скобки вокруг json.dumps(trimmed_dict). json.dumps превращает ваш trimmed_dict в строку, которая становится python set в окружении фигурных скобок.

Кроме того, вы можете удалить json.dumps и подключить trimmed_dict в структуру непосредственно как значение, связанное с payload.

...