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