在 Python 中從 URL 獲取 JSON

Sahil Bhosale 2021年4月29日
在 Python 中從 URL 獲取 JSON

每當我們希望使用 URL 從 Web 伺服器獲取任何資料時,該資料都應具有某種特定的格式。通常,每當我們想從 Web 伺服器獲取任何資料時,我們都會使用 JSON 或 XML 格式。

與 XML 相比,我們更喜歡 JSON,因為它在軟體行業非常流行。在 Python 中,有各種庫來處理 JSON。

在整個教程中,我們將使用 jsonrequests 模組,它們在 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 資料

首先,我們需要匯入 requestsjson 模組以獲取和訪問資料。

import requests
import 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
import 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 程式碼鍵。

作者: Sahil Bhosale
Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn

相關文章 - Python JSON