在 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, 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 代码键。

相关文章 - Python JSON

  • 如何漂亮打印 JSON 文件
  • 相关文章 - Python API

  • 在 Python 中保存字典到 JSON
  • 如何漂亮打印 JSON 文件