JSON

Python 标准库提供了 json 模块,用于处理 JSON 数据。

常用函数

函数
作用

json.dumps(obj)

将 Python 对象(如 dict、list)转换为 JSON 字符串

json.loads(s)

将 JSON 字符串解析为 Python 对象

json.dump(obj, file)

将 Python 对象写入文件(以 JSON 格式)

json.load(file)

从文件读取 JSON 数据并解析为 Python 对象

注意:带 s 的函数处理字符串(string),不带 s 的处理文件对象(stream)。

字符串 <-->Python对象
import json
# Python 对象转 JSON 字符串
data = {"name":"Alice", "age": 20, "is_student": False}
json_str = json.dumps(data)
print(json_str)

# JSON 字符串转 Python 对象
parsed = json.loads(json_str)
print(parsed)
文件读写
import json

data = {"name":"Alice", "age": 20, "is_student": False}

# 写入 JSON 文件
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

with open("data.json", "r", encoding="utf-8") as f:
    json.load(f)

常用参数说明

参数
说明

ensure_ascii=False

允许输出中文等非 ASCII 字符(默认为 True,会转义)

indent=2

格式化输出,缩进空格数(便于阅读)

sort_keys=True

对字典的 key 进行排序

separators=(',', ':')

自定义分隔符(可压缩 JSON 大小)

Python 与 JSON 类型映射

Python 类型
JSON 类型

dict

object

list, tuple

array

str

string

int, float

number

True

true

False

false

None

null

注意:`tuple`会被转为 JSON 数组,但读回时是`list`

自定义序列化(处理不支持的类型)

对于datetime、自定义类等不能直接序列化的对象,可以通过以下方式处理

方法 1:使用default参数

方法 2: 继承json.JSONEncoder

常见错误与注意事项

  • 中文乱码:务必设置ensure_ascii=False并制定文件编码utf-8

  • 浮点精度问题:JSON 中数字无整/浮点之分,Python 会统一转位float(大整数可能丢失精度)。

  • 对象引用vs值复制:json.loads/dumps返回的是新对象,不会修改原数据。

  • JSONDecodeError:解析非法 JSON 字符串时抛出。

性能建议

  • 大量数据处理时,使用ujsonorjson等第三方高性能库。

  • 避免在循环中频繁调用dumps/loads,可批量处理。

最后更新于