【问题标题】:Sending JSON with array of dicts with python-requests使用 python-requests 发送带有字典数组的 JSON
【发布时间】:2018-12-16 09:40:00
【问题描述】:

我正在尝试使用请求模块发送包含字典数组的 json。 这是我的代码示例:

payload = {
    "arrayData": [
        {
            "key1": 1,
            "key2": 2,
            "key3": {
                "subkey": 3
            }
        }
    ]
}
r = requests.post(
    'https://httpbin.org/post',
    data = payload,
)
print(r.text)

我认为我的请求如下所示:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "arrayData": [
      "key1", 
      "key2", 
      "key3"
    ]
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Connection": "close", 
    "Content-Length": "44", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.18.4"
  }, 
  "json": null, 
  "url": "https://httpbin.org/post"
}

问题是 arrayData 有时会变成普通的值列表。

以表单形式发送该 json 对我的任务至关重要,但我不知道如何做到这一点。使用 json=payload 或 data=json.dumps(payload) 发送请求并不能解决问题,因为解析的数据进入“json”部分,但我需要它在“form”中。

在我的示例中,arrayData 仅包含一个 dict,但可能有多个。

【问题讨论】:

  • 您的意思是将其作为表单数据发送吗?也许您可能想发送 JSON:data=json.dumps(payload)
  • 是的。我试过了,它解析正确,但进入“json”部分,“form”变为空。
  • @Rodriger 您正在使用的 API 到底是什么?
  • 它需要带有包含 JSON dicts 数组的 arrayData 字段的表单

标签: python python-requests


【解决方案1】:

原来是带有arrayData字段和JSON内容的表单,所以正确的payload应该是这样的:

payload = {
"arrayData": json.dumps([{
    "key1": 1,
    "key2": 2,
    "key3": {
        "subkey": 3
        }
    }])
}

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2020-09-18
    • 1970-01-01
    • 2016-07-25
    相关资源
    最近更新 更多