共计 2114 个字符,预计需要花费 6 分钟才能阅读完成。
在数据存储与传输中,JSON(JavaScript Object Notation)是一种非常常用的格式。它简洁、可读性强,广泛应用于接口通信、配置文件和数据存储。Python 提供了内置的 json 模块,方便我们对 JSON 数据进行读取与写入。
- JSON 基本概念
JSON 是一种轻量级的数据交换格式,常见的数据结构包括:
- 对象(字典形式):
{"name": "Tom", "age": 20} - 数组(列表形式):
[1, 2, 3, 4] - 字符串、数值、布尔值、null
Python 与 JSON 数据的对应关系:
- Python 字典(dict)↔ JSON 对象
- Python 列表(list)↔ JSON 数组
- Python 字符串(str)↔ JSON 字符串
- Python 整数 / 浮点数 ↔ JSON 数字
- Python True/False ↔ JSON true/false
- Python None ↔ JSON null
- Python 对象转 JSON(序列化)
使用json.dumps()方法,可以将 Python 对象转换为 JSON 字符串。
import json
data = {
"name": "Alice",
"age": 25,
"is_student": False,
"scores": [85, 92, 78]
}
# 序列化为 JSON 字符串
json_str = json.dumps(data)
print(json_str)
输出:
{"name": "Alice", "age": 25, "is_student": false, "scores": [85, 92, 78]}
如果需要美化输出,可以使用 indent 参数:
json_str = json.dumps(data, indent=4, ensure_ascii=False)
print(json_str)
这样会以缩进的形式输出,且中文不会被转义。
- JSON 字符串转 Python 对象(反序列化)
使用json.loads()方法,可以将 JSON 字符串解析为 Python 对象。
import json
json_str = '{"name": "Bob", "age": 30, "is_student": true}'
data = json.loads(json_str)
print(data["name"]) # Bob
print(data["age"]) # 30
print(data["is_student"]) # True
- JSON 与文件交互
在实际应用中,JSON 数据通常存储在文件中,例如配置文件或数据文件。
- 写入 JSON 数据到文件:
import json
data = {
"username": "admin",
"password": "123456",
"roles": ["editor", "admin"]
}
with open("config.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
这会将数据写入到 config.json 文件。
- 从文件读取 JSON 数据:
import json
with open("config.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data)
这样就可以把文件中的 JSON 数据读取到 Python 字典中。
- 异常处理
在读取 JSON 文件时,可能会遇到格式错误的情况。可以使用try-except来捕获异常。
import json
try:
with open("invalid.json", "r", encoding="utf-8") as f:
data = json.load(f)
except json.JSONDecodeError as e:
print(f"JSON 格式错误:{e}")
- 实战案例:记录用户信息
我们可以用 JSON 来保存用户注册信息。
import json
def save_user(user, filename="users.json"):
try:
with open(filename, "r", encoding="utf-8") as f:
users = json.load(f)
except FileNotFoundError:
users = []
users.append(user)
with open(filename, "w", encoding="utf-8") as f:
json.dump(users, f, indent=4, ensure_ascii=False)
new_user = {"name": "Tom", "age": 22, "email": "[email protected]"}
save_user(new_user)
运行后,每次新增的用户信息都会保存到 users.json 文件中,便于后续管理。
总结:
本节学习了 JSON 在 Python 中的基本用法,包括数据的序列化、反序列化,以及 JSON 文件的读写操作。JSON 是现代开发中最常用的数据格式之一,熟练掌握它可以帮助我们更好地进行数据存储与交互。
思考与练习:
- 编写一个程序,读取
students.json文件,统计所有学生的平均分。 - 修改用户信息保存的程序,避免重复保存同一邮箱的用户。
- 尝试从一个在线 API 获取 JSON 数据,并解析其中的内容。
正文完