一、核心概念
在 Python 中,字典(dict) 和 JSON(JavaScript Object Notation) 是两种常见的数据结构,它们看似相似,但在本质和用途上有显著区别。
字典(dict) | JSON |
---|---|
Python 内置数据类型,存储键值对 | 一种通用的轻量级数据交换格式,独立于编程语言 |
用于内存中的数据处理 | 用于跨平台、跨系统的数据传输和存储 |
语法遵循 Python 规则 | 语法遵循 JSON 标准规范 |
二、语法差异
字典(Python 语法)
person = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Physics"],
"address": None # Python 中用 None
}
JSON(严格语法规范)
{
"name": "Alice",
"age": 30,
"is_student": false, // JSON 必须小写
"courses": ["Math", "Physics"],
"address": null // JSON 中用 null
}
关键区别:
- 引号要求:JSON 键和字符串必须用双引号,Python 字典可用单/双引号。
- 布尔值:JSON 用 true/false(小写),Python 用 True/False(首字母大写)。
- 空值:JSON 用 null,Python 用 None。
三、数据类型支持
数据类型 | 字典支持 | JSON 支持 |
---|---|---|
字符串 | ✅ | ✅ |
数字(整型/浮点) | ✅ | ✅ |
布尔值 | ✅ | ✅ |
列表/数组 | ✅ | ✅ |
字典/对象 | ✅ | ✅ |
None/null | ✅ | ✅ |
元组(Tuple) | ✅ | ❌(转为数组) |
集合(Set) | ✅ | ❌ |
自定义对象 | ✅ | ❌(需序列化) |
四、相互转换
Python 提供了 json 模块,可以轻松实现字典与 JSON 字符串的转换。
字典 → JSON(序列化)
import json
data_dict = {"name": "Alice", "age": 30}
json_str = json.dumps(data_dict) # 转换为 JSON 字符串
print(json_str) # 输出:{"name": "Alice", "age": 30}
JSON → 字典(反序列化)
json_str = '{"name": "Bob", "age": 25}'
data_dict = json.loads(json_str) # 转换为字典
print(data_dict["name"]) # 输出:Bob
五、应用场景
字典的用途
- Python 内部数据操作(增删改查)。
- 临时存储结构化数据。
JSON 的用途
-
与前端/API 交互(如 HTTP 请求响应)。
-
保存配置文件(如 config.json)。
-
数据库存储结构化文本。
六、注意事项
性能:
- JSON 序列化和反序列化会带来额外的性能开销,频繁操作时需注意优化。
安全性:
- 反序列化 JSON 时,需确保数据来源可信,避免注入攻击。
编码问题:
- JSON 默认使用 UTF-8 编码,处理非 ASCII 字符时需注意编码一致性。
七、总结
字典 | JSON |
---|---|
Python 内存中的数据结构 | 跨平台的文本数据格式 |
操作灵活,支持更多数据类型 | 格式严格,通用性强 |
直接用于编程逻辑处理 | 用于数据持久化和传输 |
通过合理使用字典和 JSON,可以在 Python 开发中高效处理数据。字典适合内存操作,而 JSON 适合数据交换和存储。