Python3 JSON
Python3 学习笔记 · 整理自菜鸟教程
一句话
JSON 是轻量级数据交换格式,Python 用标准库 json 在 Python 对象与 JSON 字符串之间转换:json.dumps() 序列化、json.loads() 反序列化。
要点
- JSON 语法:对象
{"key": value}、数组[...]、字符串、数字、布尔、null;键必须双引号。 - 类型对应:
dict ↔ 对象,list/tuple ↔ 数组,str ↔ 字符串,int/float ↔ 数字,True/False ↔ true/false,None ↔ null。 dumps带参数控制格式:indent缩进、ensure_ascii=False保留中文、sort_keys排序、separators紧凑。loads解析字符串;load/dump直接读写文件。- 中文默认被转成
\uXXXX,加ensure_ascii=False输出原始中文。 - 不支持的 Python 类型(datetime、自定义对象)默认会报错,需传
default参数自定义转换。
语法 / 常用方法
| 语法/方法 | 说明 | 示例 |
|---|---|---|
json.dumps(obj) |
Python 对象 → JSON 字符串 | s = json.dumps({'a': 1}) |
json.dumps(obj, indent=2) |
带缩进美化输出 | json.dumps(data, indent=2) |
json.dumps(obj, ensure_ascii=False) |
保留中文不转义 | json.dumps(d, ensure_ascii=False) |
json.dumps(obj, sort_keys=True) |
键按字母排序 | json.dumps(d, sort_keys=True) |
json.loads(json_str) |
JSON 字符串 → Python 对象 | d = json.loads('{"a":1}') |
json.dump(obj, file) |
对象写入 JSON 文件 | json.dump(data, f, ensure_ascii=False) |
json.load(file) |
从 JSON 文件读取 | data = json.load(f) |
json.loads(s, parse_float=...) |
自定义数字解析 | parse_int=int 等 |
default 参数 |
处理不可序列化类型 | json.dumps(d, default=str) |
代码示例
1 | |
易错点
- JSON 的键必须是双引号
"key",单引号字符串会json.loads报错(JSONDecodeError)。 - 字典的键若不是字符串(如 int)会被自动转成字符串;
True变true、None变null,注意大小写。 - 元组序列化后变数组(list),
loads回来是 list 不是 tuple。 - 解析失败会抛
json.JSONDecodeError,对不可信输入要 try/except。 - 读文件要指定
encoding='utf-8',否则中文可能乱码。 - 默认
ensure_ascii=True,忘设False时中文显示为\uXXXX(用于传输没问题,但可读性差)。