繁体   English   中英

Python请求库:json.dumps的使用

[英]Python requests library: use of json.dumps

潜在的新手问题,但长期以来一直困扰着我。

在很多 Python 教程中,我看到了非常相似的片段,用于将某些内容发布到 REST API

import json
import requests

url = 'https://api.blabla.com/v1'
token = '1234'

headers = { 
            'Authorization: f'Bearer {token}',
            'Content-Type: 'application/json'
          }
body = {
   'name': 'Test name'
}

my_response = requests.post(url, headers=headers, data=json.dumps(body)).json()
print(my_response)

请求文档说数据对象应该接收一个字典。 在上面,主体已经是一个字典,那么为什么需要使用json.dump因为这基本上使它成为一个字符串(而文档说它应该是一个字典)。

那么为什么不应该是:

my_response = requests.post(url, headers=headers, data=body).json()

另一方面,官方请求文档还说我们可以传递 json 参数,在这个例子中它会是(如果我们遵循文档):

my_response = requests.post(url, headers=headers, json=body).json()

但是 JSON 参数应该是一个 JSON 对象,所以如果我们这样传递正文,这意味着我们将一个 dict 对象传递给 JSON 参数,这不是文档所说的。

笔记:

  • 官方文档使用的是data=json.dumps(body)
  • W3schools文档正在使用data=body

data - 附加到请求的正文。 如果提供了字典或元组列表[(key, value)] ,则将进行表单编码

https://requests.readthedocs.io/en/master/api/#requests.Request

(强调我的)

如果您将 dict 作为data传递,它将是form-encoded 如果您将 dict 作为json传递,它将被 JSON 序列化。 json参数只是data=json.dumps(body)的便捷简写。 为什么许多人使用后者而不是前者……谁知道呢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM