簡體   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