目录
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python 提供了内置模块 json
来处理 JSON 数据。通过 json
模块,你可以轻松地将 Python 数据编码成 JSON 字符串,或将 JSON 字符串解码成 Python 数据类型。
1. 安装与导入
Python 的 json
模块是内置的,因此不需要额外安装。直接导入即可使用:
python
深色版本
1import json
2. JSON 数据格式
JSON 数据通常采用以下几种格式:
- 对象:由键值对组成,键必须是字符串,值可以是任意数据类型。
- 数组:值的有序集合。
- 字符串:用双引号包围的 Unicode 字符序列。
- 数值:整数或浮点数。
- 布尔值:
true
或false
。 - null:表示空值。
3. JSON 数据解析示例
3.1 将 Python 数据编码为 JSON 字符串
python
深色版本
1import json
2
3# Python 字典
4data = {
5 "name": "Alice",
6 "age": 30,
7 "is_student": False,
8 "courses": ["Math", "Physics"],
9 "details": {
10 "address": "123 Main St",
11 "phone": None
12 }
13}
14
15# 将 Python 数据编码为 JSON 字符串
16json_string = json.dumps(data, indent=4)
17
18print(json_string)
输出结果将是:
json
深色版本
1{
2 "name": "Alice",
3 "age": 30,
4 "is_student": false,
5 "courses": [
6 "Math",
7 "Physics"
8 ],
9 "details": {
10 "address": "123 Main St",
11 "phone": null
12 }
13}
3.2 解析 JSON 字符串为 Python 数据
python
深色版本
1import json
2
3# JSON 字符串
4json_string = """
5{
6 "name": "Bob",
7 "age": 25,
8 "is_student": true,
9 "courses": ["Chemistry", "Biology"],
10 "details": {
11 "address": "456 Oak St",
12 "phone": null
13 }
14}
15"""
16
17# 解析 JSON 字符串为 Python 字典
18data = json.loads(json_string)
19
20print(data)
输出结果将是:
python
深色版本
1{
2 'name': 'Bob',
3 'age': 25,
4 'is_student': True,
5 'courses': ['Chemistry', 'Biology'],
6 'details': {'address': '456 Oak St', 'phone': None}
7}
4. 高级用法
4.1 自定义对象编码
如果你需要将自定义的 Python 对象编码为 JSON,可以使用 default
参数来自定义转换逻辑。
python
深色版本
1import json
2
3class Student:
4 def __init__(self, name, age):
5 self.name = name
6 self.age = age
7
8# 创建一个学生对象
9student = Student("Charlie", 22)
10
11# 定义一个转换函数
12def student_to_dict(obj):
13 if isinstance(obj, Student):
14 return {"name": obj.name, "age": obj.age}
15 raise TypeError(f"Object of type {obj.__class__.__name__} is not JSON serializable")
16
17# 使用自定义转换函数编码
18json_string = json.dumps(student, default=student_to_dict)
19
20print(json_string)
输出结果将是:
json
深色版本
1{"name": "Charlie", "age": 22}
4.2 读写文件
你还可以使用 json
模块提供的 dump
和 load
方法来直接从文件读写 JSON 数据。
python
深色版本
1import json
2
3# 写入 JSON 数据到文件
4data = {"key": "value"}
5with open('data.json', 'w') as f:
6 json.dump(data, f)
7
8# 从文件读取 JSON 数据
9with open('data.json', 'r') as f:
10 data = json.load(f)
11 print(data)
5. 实际应用场景
5.1 解析 API 响应
假设你正在处理一个 RESTful API 的响应,可以使用 json
模块来解析返回的 JSON 数据。
python
深色版本
1import requests
2import json
3
4response = requests.get('https://api.example.com/data')
5data = response.json() # 直接解析 JSON 响应
6
7# 或者手动解析
8data = json.loads(response.text)
9
10print(data)
5.2 保存配置文件
JSON 也是一种常用的配置文件格式。可以使用 json
模块来读写配置文件。
python
深色版本
1import json
2
3# 保存配置文件
4config = {"host": "localhost", "port": 8080}
5with open('config.json', 'w') as f:
6 json.dump(config, f, indent=4)
7
8# 读取配置文件
9with open('config.json', 'r') as f:
10 config = json.load(f)
11 print(config)
6. 注意事项
- Unicode 支持:JSON 支持 Unicode 字符,这意味着你可以轻松地处理非英文字符。
- 错误处理:在解析 JSON 数据时,如果数据格式不正确,会抛出
json.JSONDecodeError
异常。 - 性能优化:在处理大量数据时,可以考虑使用第三方库如
ujson
来提高性能。 - 安全性:在处理不可信来源的 JSON 数据时,要小心潜在的安全风险,如 JSONP 攻击。
总结
Python 的 json
模块提供了简单而强大的工具来处理 JSON 数据。通过上述示例,你应该能够掌握如何使用 json
模块来编码和解码 JSON 数据,以及如何处理 JSON 文件和实际应用场景中的数据。