Python处理JSON依赖json模块,核心是loads()解析字符串、load()读文件、dumps()转字符串、dump()写文件;需注意数据类型、编码、异常处理及with语句资源管理。

Python处理JSON数据主要靠内置的json模块,核心是json.loads()(解析字符串为Python对象)和json.dumps()(序列化Python对象为JSON字符串)。关键要分清数据来源(字符串 or 文件)和目标类型(字典/列表 or 文件写入),避免类型错误和编码问题。
从字符串读取JSON:用loads()转成Python对象
适用于API响应、配置字符串等已加载到内存的JSON文本。必须确保字符串格式合法,否则会抛json.JSONDecodeError。
- 直接解析:`data = json.loads('{"name": "Alice", "age": 30}')` → 得到字典
- 处理嵌套结构:JSON数组会自动转为Python列表,可直接索引或遍历
- 容错建议:用
try...except捕获解析异常,配合print()输出原始字符串便于调试
从文件读取JSON:用load()省去手动读取步骤
比先用open()读字符串再loads()更简洁,自动处理文件打开与编码(默认UTF-8)。
- 标准写法:`with open("config.json", "r", encoding="utf-8") as f: data = json.load(f)`
- 注意文件路径和权限,Windows下反斜杠需用双反斜杠或原始字符串(
r"path\to\file.json") - 如果文件含BOM头或非UTF-8编码(如GBK),需显式指定
encoding参数
把Python数据存成JSON字符串:dumps()控制输出格式
用于生成API请求体、日志记录或临时调试输出。默认压缩无空格,可通过参数提升可读性。
立即学习“Python免费学习笔记(深入)”;
- 基础用法:`json_str = json.dumps({"city": "Beijing", "temp": 25.5})`
- 美化输出:加
indent=2自动缩进,ensure_ascii=False保留中文字符(不转义为\uXXXX) - 处理不可序列化类型(如datetime、自定义类):需传入
default函数,例如default=str把所有未知类型转字符串
把Python数据写入JSON文件:dump()一步到位
适合保存配置、缓存结果或导出数据。本质是dumps() + 文件写入,但更安全(自动处理编码和关闭)。
- 典型写法:`with open("output.json", "w", encoding="utf-8") as f: json.dump(data, f, indent=2, ensure_ascii=False)`
- 写入前确认
data中不含set、datetime等原生不支持类型,否则报TypeError - 若需追加内容(如日志行式JSON),不能用
dump(),应逐行json.dumps()后f.write()
不复杂但容易忽略细节:始终检查数据类型是否符合JSON规范,留意编码和异常处理,文件操作坚持用with语句保证资源释放。










