登录
首页 >  文章 >  python教程

Python解析JSON数据,json模块详解

时间:2026-05-22 16:37:42 492浏览 收藏

Python内置的json模块是处理JSON数据最简洁高效的方式,无需安装第三方库即可实现JSON字符串与Python对象(如dict、list、datetime等)的双向无缝转换;文章深入解析了loads/load(解析)和dumps/dump(生成)四大核心方法的用法、常见陷阱(如单引号报错、中文转义、日期不支持、编码异常)及实用技巧(如ensure_ascii=False美化中文、object_hook/custom default处理特殊类型),帮你避开90%的JSON实战坑,真正用好标准库这一强大而可靠的工具。

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()对中文会正常保留,但输出时可能被转义(如\u4f60\u597d)。可通过ensure_ascii=False避免:

  • 解析无影响,但后续打印或写入时更易读
  • 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解析与生成场景。不需要额外依赖,也无需过度封装,标准库足够稳健实用。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Python解析JSON数据,json模块详解》文章吧,也可关注golang学习网公众号了解相关技术文章。

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>