在 Python 中從 URL 獲取 JSON
每當我們希望使用 URL 從 Web 伺服器獲取任何資料時,該資料都應具有某種特定的格式。通常,每當我們想從 Web 伺服器獲取任何資料時,我們都會使用 JSON 或 XML 格式。
與 XML 相比,我們更喜歡 JSON,因為它在軟體行業非常流行。在 Python 中,有各種庫來處理 JSON。
在整個教程中,我們將使用 json
和 requests
模組,它們在 Python 中可用。
我們將要獲取的 JSON 資料來自以下 URL。該 URL 允許我們獲取與 user
相關的所有資料,例如名稱,電子郵件,地址等。它是免費使用的。
https://jsonplaceholder.typicode.com/users
就 Restful API 而言,URL 被稱為端點。在整個教程中,我們將交替使用這兩個詞。在上面的 URL 中,/users
指的是端點。
如果在瀏覽器中開啟上述 URL,你將以 JSON 格式檢視與 user
相關的所有資料。如下所示。
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
},
]
請注意,在上面的程式碼塊中,我們僅向你顯示了與單個使用者有關的 JSON 資料。這僅是出於解釋目的。但是,如果你訪問 URL,則將看到所有使用者的資料。
JSON 是指 JavaScript 物件表示法
。它用於在伺服器和客戶端之間傳送和接收資料,反之亦然。在這裡,請不要與 JavaScript
一詞混淆; JSON 獨立於任何程式語言。在 JSON 中,我們使用兩種型別的方括號來格式化資料。一個是方括號 []
,代表一個陣列
或一個列表
,另一個是大括號 {}
,它代表一個物件
。
JSON 中的資料將始終以引號""
內的鍵值
對的形式出現。因此,如果要訪問任何值,則必須使用與該值關聯的鍵
。例如,假設我們要從上述 JSON 資料訪問使用者名稱;我們將使用 name
鍵獲取值 Leanne Graham
,這是第一個使用者的名稱。另外,請注意,JSON 中不允許使用任何註釋。
在 Python 中獲取和訪問 JSON 資料
首先,我們需要匯入 requests
和 json
模組以獲取和訪問資料。
import requests, json
從 URL 提取資料並將其轉換為字串
我們必須在此處執行的第一步是使用 requests
庫獲取 JSON 資料。
url = requests.get("https://jsonplaceholder.typicode.com/users")
text = url.text
print(type(text))
輸出:
<class 'str'>
requests
庫具有稱為 get()
的方法,該方法將 URL 作為引數,然後將 GET
請求傳送到指定的 URL。我們從伺服器獲得的響應儲存在名為 url
的變數中。
儲存在 url
變數中的響應需要藉助 .text
方法作為 url.text
轉換為字串。然後,我們將結果儲存在 text
變數中。如果列印 text
變數的型別,它將是 <class 'str'>
型別。
解析 JSON 資料
解析是將字串資料轉換為 JSON 格式的過程。為此,我們將使用 json
模組。
data = json.loads(text)
print(type(data))
輸出:
<class 'list'>
json
模組帶有一個稱為 loads()
的方法,loads()
中的 s
代表字串。由於我們想將字串資料轉換為 JSON,因此我們將使用此方法。在此方法內部,我們必須傳遞包含字串資料 json.loads(text)
的 text
變數,並將其儲存在 data
變數內。
現在,data
將具有整個 JSON 響應。如果列印 data
變數的型別,則它將是 <class 'list'>
型別,因為在這種情況下,JSON 響應以方括號 []
開頭,而在 Python 中,列表以方括號開始。
訪問 JSON 資料
既然我們已經解析了 JSON 資料,就可以使用 data
變數訪問我們想要的單個值了。要訪問第一個使用者的詳細資訊,例如姓名和地址,我們可以執行以下操作。
import json, requests
url = requests.get("https://jsonplaceholder.typicode.com/users")
text = url.text
data = json.loads(text)
user = data[0]
print(user['name'])
address = user['address']
print(address)
輸出:
Leanne Graham
{'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}
要訪問使用者列表中的第一個使用者,我們必須使用 JSON 資料中的 0
索引,該索引儲存在名為 data
的變數中,然後將該第一個使用者的全部詳細資訊儲存在 user
中多變的。現在,此使用者
是一個物件,其中包含與該使用者有關的所有詳細資訊。要訪問該名稱,我們只需要在 user
變數(如 user['name']
)中傳遞 name
鍵,然後進行列印即可。它將在控制檯內列印使用者名稱。
要訪問該地址,我們必須在使用者變數(即 user['address']
)中傳遞 address
鍵,然後將其儲存在名為 address
的變數中,然後進行列印。這將為你提供一個物件,其中將包含與地址欄位相關的所有特定詳細資訊,例如公寓號,街道名稱,郵政編碼等。假設在這些詳細資訊中,你只需要使用者的 zipcode
;那麼你必須在 address
物件中傳遞 zipcode
程式碼鍵。