Python解析JSON数据_json模块深入解析

5次阅读

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

Python解析JSON数据_json模块深入解析

Python内置的json模块是处理JSON数据最常用、最可靠的方式。它不依赖第三方库,标准库自带,支持字符串与Python对象之间的双向转换,且默认兼容大多数常见数据类型

json.loads():把JSON字符串转成Python对象

这是解析JSON文本的核心方法。输入必须是合法的JSON格式字符串(注意:JSON中键名和字符串值必须用双引号,单引号会报错)。

  • 成功时返回对应的Python结构:JSON对象 → dict,数组 → list,数字 → intFloattrue/falseTrue/FalseNULLNone
  • 遇到非法JSON(如尾部逗号、单引号、中文冒号)会抛出json.JSONDecodeError,建议用try...except捕获
  • 可传入object_hook参数,在字典构造完成后做自定义处理(例如统一转为namedtupledataclass实例)

json.load():直接从文件读取并解析JSON

适用于已保存为.json文件的数据。它内部调用json.loads(),但省去手动读取文件内容的步骤。

  • 需传入一个以"r"模式打开的文件对象(推荐配合with open(...)使用)
  • 注意文件编码:默认按UTF-8解析,若文件含bom或用GBK等编码,需显式指定encoding参数
  • 如果文件内容为空或只有空白字符,会触发JSONDecodeError

处理中文、特殊字符与日期等常见问题

默认情况下,json.loads()对中文会正常保留,但输出时可能被转义(如u4f60u597d)。可通过ensure_ascii=False避免:

立即学习Python免费学习笔记(深入)”;

  • 解析无影响,但后续打印或写入时更易读
  • JSON本身不原生支持datetime,遇到时间字段需手动转换:可用object_hook识别特定键(如"created_at"),再用datetime.fromisoformat()strptime解析
  • 若JSON中混有Python特有类型(如setbytes),标准模块无法直接解析,需预处理或改用json5orjson等扩展库

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解析与生成场景。不需要额外依赖,也无需过度封装,标准库足够稳健实用。

text=ZqhQzanResources