在 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