17370845950

PythonJSON数据操作方法_解析与序列化实战【指导】
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请求体、日志记录或临时调试输出。默认压缩无空格,可通过参数提升可读性。

  • 基础用法:`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语句保证资源释放。