python内置json模块支持json与python对象双向转换,核心方法为loads/load(解析)和dumps/dump(生成),兼容常见类型,需注意编码、中文显示、日期处理及非标准类型限制。

Python内置的json模块是处理JSON数据最常用、最可靠的方式。它不依赖第三方库,标准库自带,支持字符串与Python对象之间的双向转换,且默认兼容大多数常见数据类型。
json.loads():把JSON字符串转成Python对象
这是解析JSON文本的核心方法。输入必须是合法的JSON格式字符串(注意:JSON中键名和字符串值必须用双引号,单引号会报错)。
- 成功时返回对应的Python结构:JSON对象 →
dict,数组 →list,数字 →int或float,true/false→True/False,null→None - 遇到非法JSON(如尾部逗号、单引号、中文冒号)会抛出
json.JSONDecodeError,建议用try...except捕获 - 可传入
object_hook参数,在字典构造完成后做自定义处理(例如统一转为namedtuple或dataclass实例)
json.load():直接从文件读取并解析JSON
适用于已保存为.json文件的数据。它内部调用json.loads(),但省去手动读取文件内容的步骤。
- 需传入一个以
"r"模式打开的文件对象(推荐配合with open(...)使用) - 注意文件编码:默认按UTF-8解析,若文件含BOM或用GBK等编码,需显式指定
encoding参数 - 如果文件内容为空或只有空白字符,会触发
JSONDecodeError
处理中文、特殊字符与日期等常见问题
默认情况下,json.loads()对中文会正常保留,但输出时可能被转义(如\u4f60\u597d)。可通过ensure_ascii=False避免:
立即学习“Python免费学习笔记(深入)”;
- 解析无影响,但后续打印或写入时更易读
- JSON本身不原生支持
datetime,遇到时间字段需手动转换:可用object_hook识别特定键(如"created_at"),再用datetime.fromisoformat()或strptime解析 - 若JSON中混有Python特有类型(如
set、bytes),标准模块无法直接解析,需预处理或改用json5、orjson等扩展库
json.dumps() 和 json.dump():反向操作不可少
调试或保存结果时经常需要把Python对象转回JSON。两者区别类似loads/load:
-
dumps(obj)返回字符串;dump(obj, file_obj)直接写入文件 - 常用参数:
indent=2美化缩进,sort_keys=True按键排序便于对比,default函数可处理非标准类型(如datetime可转为ISO字符串) - 注意:浮点数精度、NaN/Infinity在JSON中不合法,
json模块默认会报错,需提前过滤或用allow_nan=False控制
掌握这四个核心方法及其关键参数,就能覆盖绝大多数JSON解析与生成场景。不需要额外依赖,也无需过度封装,标准库足够稳健实用。










