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 integers

2. dict 是可修改的对象

py_dict = {"a": 1}
py_dict["a"] = 2  # ✓ OK

3. 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