Python dict 与 JSON 的区别
1. 本质区别
| 特性 | Python dict |
JSON |
|---|---|---|
| 类型 | Python 内置数据类型 | 字符串格式(文本协议) |
| 存储 | 内存中的对象 | 文件/网络中的文本 |
| 能力 | 可存储任意 Python 对象 | 仅支持有限的数据类型 |
2. 数据类型支持
Python dict 可以存储任意类型
py_dict = {
"name": "Alice",
"age": 30,
"scores": [95, 87, 92], # list ✓
"active": True, # bool ✓
"data": {"nested": "value"}, # 嵌套 dict ✓
"none_val": None, # None ✓
"func": lambda x: x, # 函数 ✗ (dict专属)
"custom": MyClass(), # 自定义对象 ✗ (dict专属)
}JSON 只支持有限类型
json_data = {
"name": "Alice", # str ✓
"age": 30, # int/float ✓
"scores": [95, 87], # array ✓
"active": True, # boolean ✓
"nested": {"a": 1}, # object ✓
"none_val": None # null ✓
}
# datetime、bytes、set 等都不支持3. 相互转换
import json
from datetime import datetime
# Python dict → JSON 字符串(序列化)
py_dict = {"name": "Alice", "age": 30}
json_str = json.dumps(py_dict)
# '{"name": "Alice", "age": 30}'
# JSON 字符串 → Python dict(反序列化)
json_str = '{"name": "Alice", "age": 30}'
py_dict = json.loads(json_str)
# {'name': 'Alice', 'age': 30}
# 日期等特殊类型需要手动转换
py_dict = {"created": datetime.now()}
json_str = json.dumps(py_dict, default=str) # 自定义序列化
# '{"created": "2026-05-11 10:30:00"}'4. 关键区别
1. JSON 是字符串,无法直接操作
json_str = '{"a": 1}'
json_str["a"] # ❌ TypeError: string indices must be integers2. dict 是可修改的对象
py_dict = {"a": 1}
py_dict["a"] = 2 # ✓ OK3. JSON 键必须是字符串
json_str = '{"key": 1}' # ✓
json_str = '{"123": 1}' # ✓ 数字会被转成字符串4. Python dict 键可以是任意可哈希对象
py_dict = {(1, 2): "value"} # ✓ 元组作键
# JSON 不支持元组作键5. 验证示例
import json
# 判断是否为 JSON 字符串
text = '{"key": "value"}'
try:
parsed = json.loads(text)
print("是有效的 JSON")
except json.JSONDecodeError:
print("不是有效的 JSON")
# 判断对象是否可序列化为 JSON
def can_be_json(obj):
try:
json.dumps(obj)
return True
except (TypeError, ValueError):
return False
print(can_be_json({"a": 1})) # True
print(can_be_json({"f": lambda: 1})) # False总结
- Python
dict: 内存中的数据结构,可包含任意 Python 对象 - JSON: 文本格式的数据交换协议,仅支持有限的基础类型
- 关系: JSON 是 dict 的”可序列化子集”,dict 是 JSON 的”超集”
作者:海马 创建时间:2026-05-11 10:57
最后编辑:海马 更新时间:2026-05-13 07:11
最后编辑:海马 更新时间:2026-05-13 07:11