JSON 是一个人类可读的,基于文本的数据格式。
它独立于语言,并且可以在应用之间进行数据交换。
在这篇文章中,我们将会解释在 Python 中如何解析 JSON 数据。
json
模块是Python 标准库的一部分,它允许你对 JSON 数据进行编码和解码。
JSON 是一个字符串,代表数据。编码或者序列化意味着将一个 Python 对象转换成 JSON 字符串,以便存储到文件中或者通过网络进行传输。解码或者反序列化和编码相反,将 JSON 字符串转换成 Python 对象。
下面是一个表格,表示 Python 对象和 JSOn 对应的数据结构:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float | number |
True | true |
False | false |
None | null |
想要处理 JSON,在你文件的顶部简单导入 JSON 模块:
import json
json
模块有两个方法用来将 Python 对象编码成 JSON,dump()
和dumps()
。
dump()
方法将输出发送到文件中。它有两个参数,用来编码的对象,和文件。下面是一个例子:
data = {
"country": "Germany",
"vehicle": {
"name": "Volkswagen",
"model": "T-Roc"
}
}
with open("file.json", "w") as file:
json.dump(data, file)
如果你运行脚本,这将创建一个名为file.json
{"country": "Germany", "vehicle": {"name": "Volkswagen", "model": "T-Roc"}}
dumps()
方法和dump()
一样,但是不会将输出发送到文件,而是返回一个字符串:
data = {
"country": "Germany",
"vehicle": {
"name": "Volkswagen",
"model": "T-Roc"
}
}
json.dumps(data)
输出:
'{"country": "Germany", "vehicle": {"name": "Volkswagen", "model": "T-Roc"}}'
两个方法都有相同的关键字参数。如果你想调试 JSON 数据,你可能想指定缩进:
data = {
"country": "Germany",
"vehicle": {
"name": "Volkswagen",
"model": "T-Roc"
}
}
print(json.dumps(data, indent=2))
输出:
{
"country": "Germany",
"vehicle": {
"name": "Volkswagen",
"model": "T-Roc"
}
}
想要将 JSON 数据转换成 Python 对象,使用load()
和loads()
方法。
load()
方法从文件中读取 JSON 结构,并转换成 Python 对象。
比如说我们有下面的 JSON 文件:
[
{
"userId": 1,
"id": 1,
"title": "Meet with Lisa",
"completed": true
},
{
"userId": 1,
"id": 2,
"title": "Design a prototype",
"completed": false
}
]
想要将 JSON 数据转换成一个 Python ,你可以像下面一样:
import json
with open('file.json') as f:
data = json.load(f)
type(data)
这个 JSON 数据被转换成一个 Python 列表,你可以在你的代码中使用它。
输出:
<class 'list'>
loads()
方法将一个JSON 字符串转换成一个 Python 对象:
import json
json_str= '{"userId": "1", "id": "1", "title": "Meet with Lisa", "completed": "True"}'
print(json.loads(json_str))
字符串被转成一个 Python 字典:
{'userId': '1', 'id': '1', 'title': 'Meet with Lisa', 'completed': 'True'}
这是一个更高级的例子,显示如何请求 API,并解码 JSON 数据:
import json
import requests
response = requests.get("https://jsonplaceholder.typicode.com/users")
users = json.loads(response.text)
print(users)
我们已经展示了在 Python 中如何编码和解码 JSON 数据。