很多時候在 python 中請求 API 我都是一會兒用 response.json,一會兒用 json.loads,但是這兩個函式的區別我貌似一直沒太搞明白,所以趁著這次就把他們解決掉,
問題分析
resonse.json
此網站對這個函式的解釋如下(經過谷歌翻譯):
response.json()回傳結果的 JSON 物件(如果結果是以 JSON 格式撰寫的,否則會引發錯誤),Python 請求通常用于從特定資源 URI 中獲取內容,每當我們通過 Python 向指定的 URI 發出請求時,它都會回傳一個回應物件,現在,此回應物件將用于訪問某些功能,例如內容、標頭等,本文圍繞如何從回應物件中檢查response.json()展開,它是請求模塊中最常用的方法之一,
簡單來說就是當我們使用 request 模塊請求 API 回傳一個 response 物件的時候,呼叫這個物件的 json 方法,即可獲得該 API 的 json 物件,在 Python 中也就是 dict,
json.loads
上面同樣的網站里對這個函式也有解釋:
json.loads()方法可用于決議有效的 JSON 字串并將其轉換為 Python 字典,它主要用于將由 JSON 資料組成的原生字串、位元組或位元組陣列反序列化為 Python Dictionary,
使用這個函式需要先 import json,上面的話的意思是,對這個函式傳入一個 json 字串,經過決議會回傳一個 Python 中的 dict(即反序列化),
看完這兩個決議,一切都明朗了,resonse.json 是針對 response 物件,而 json.loads 是針對 json 字串,兩者最終都回傳 dict,
示例
對于下面這段簡單的代碼:
import requests
response = requests.get('https://api.github.com')
print(response)
data = https://www.cnblogs.com/touryung/p/response.json()
print(data)
print(data["current_user_url"])
可以看出,它就是直接呼叫 response 函式的 json 函式,最終也成功列印出了結果:
<Response [200]>
{'current_user_url': 'https://api.github.com/user', ...}
https://api.github.com/user
那么,怎么使用 json.loads 得到同樣的結果呢,我們知道 response.text 是可以回傳回應的字串的,我們只需要把這個字串扔給 json.loads 決議就可以了,如下:
import requests
import json
response = requests.get("https://api.github.com")
print(response)
data_text = response.text
data = https://www.cnblogs.com/touryung/p/json.loads(data_text)
print(data)
print(data["current_user_url"])
最侄訓傳了和上面一樣的結果,因此,在我這個示例中,resonse.json() 與 json.loads(response.text) 的效果是一樣的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545396.html
標籤:Python
