如何使用Python的json.load()函数将JSON文件内容转换成字典?

2026-05-08 00:481阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1026个文字,预计阅读时间需要5分钟。

如何使用Python的json.load()函数将JSON文件内容转换成字典?

许多人在直接将路径字符串传递给 `json.load()` 时遇到错误。这是因为 `json.load()` 需要一个文件对象,而不是一个字符串。要解决这个问题,应该使用 `json.loads()` 函数,它接受一个字符串作为输入。下面是正确的代码示例:

json.load() 的作用是从「已打开的文件对象」里解析 JSON;json.loads() 才是解析字符串。所以得先用 open() 打开文件,再把文件对象传进去。

  • 正确写法:

    with open("data.json", "r", encoding="utf-8") as f: data = json.load(f)

  • 错误写法:json.load("data.json")(会报错)
  • 如果已经拿到 JSON 字符串(比如从网络请求来),才用 json.loads(my_str)
  • 记得加 encoding="utf-8",否则中文可能乱码(尤其 Windows 默认用 GBK)

文件不存在或格式错误时,json.load() 会直接抛异常

不是返回 None 或空字典,而是抛出 FileNotFoundErrorjson.JSONDecodeError。不捕获的话程序就崩了。

  • FileNotFoundError:路径写错、文件没放对位置、拼写大小写不对(Linux/macOS 区分大小写)
  • json.JSONDecodeError:JSON 格式非法,比如末尾多逗号、单引号代替双引号、中文标点、BOM 头残留
  • 建议加基础异常处理:

    try: with open("config.json", "r", encoding="utf-8") as f: config = json.load(f) except FileNotFoundError: print("配置文件不存在") except json.JSONDecodeError as e: print(f"JSON 解析失败:{e.msg}(第{e.lineno}行第{e.colno}列)")

读出来的数据类型是 Python 原生结构,但要注意嵌套和特殊值

json.load() 返回的是标准 Python 对象:对象 → dict,数组 → list,字符串 → str,数字 → intfloatnullNone。但它不会自动转成 datetimeDecimal 这类自定义类型。

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

  • JSON 里 "2024-06-01" 读出来还是字符串,不是 date 对象
  • 浮点数精度可能有微小偏差(比如 0.1 + 0.2 != 0.3),JSON 本身不存精度信息
  • 如果 JSON 含有注释、尾随逗号、NaNInfinity,Python 的 json 模块会拒绝解析(标准 JSON 不支持这些)
  • 需要自定义反序列化逻辑(比如把某个字段当日期处理),得用 object_hook 参数

大文件别用 json.load() 一次性加载

几 MB 以上的 JSON 文件,全读进内存再解析,容易触发 MemoryError,而且启动慢。这时候得换思路。

  • 纯文本小改可用 jq 命令行工具预处理(如提取某字段),再喂给 Python
  • 真正的大 JSON(如日志流、导出数据),考虑用 ijson 库做流式解析,只取关心的键路径
  • json.load() 内部会先把整个文件读成字符串再解析,所以即使文件只有 10MB,内存占用可能翻倍
  • 如果只是查一两个字段,先用 grep 或正则粗筛(不推荐用于嵌套结构),比全量解析快得多
实际用的时候,最常卡住的不是语法,而是编码、路径、异常没兜住、以及以为 JSON 能存任意 Python 类型——它不能。JSON 就是个有限子集,别指望它记住你的 datetimeset
标签:Python

本文共计1026个文字,预计阅读时间需要5分钟。

如何使用Python的json.load()函数将JSON文件内容转换成字典?

许多人在直接将路径字符串传递给 `json.load()` 时遇到错误。这是因为 `json.load()` 需要一个文件对象,而不是一个字符串。要解决这个问题,应该使用 `json.loads()` 函数,它接受一个字符串作为输入。下面是正确的代码示例:

json.load() 的作用是从「已打开的文件对象」里解析 JSON;json.loads() 才是解析字符串。所以得先用 open() 打开文件,再把文件对象传进去。

  • 正确写法:

    with open("data.json", "r", encoding="utf-8") as f: data = json.load(f)

  • 错误写法:json.load("data.json")(会报错)
  • 如果已经拿到 JSON 字符串(比如从网络请求来),才用 json.loads(my_str)
  • 记得加 encoding="utf-8",否则中文可能乱码(尤其 Windows 默认用 GBK)

文件不存在或格式错误时,json.load() 会直接抛异常

不是返回 None 或空字典,而是抛出 FileNotFoundErrorjson.JSONDecodeError。不捕获的话程序就崩了。

  • FileNotFoundError:路径写错、文件没放对位置、拼写大小写不对(Linux/macOS 区分大小写)
  • json.JSONDecodeError:JSON 格式非法,比如末尾多逗号、单引号代替双引号、中文标点、BOM 头残留
  • 建议加基础异常处理:

    try: with open("config.json", "r", encoding="utf-8") as f: config = json.load(f) except FileNotFoundError: print("配置文件不存在") except json.JSONDecodeError as e: print(f"JSON 解析失败:{e.msg}(第{e.lineno}行第{e.colno}列)")

读出来的数据类型是 Python 原生结构,但要注意嵌套和特殊值

json.load() 返回的是标准 Python 对象:对象 → dict,数组 → list,字符串 → str,数字 → intfloatnullNone。但它不会自动转成 datetimeDecimal 这类自定义类型。

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

  • JSON 里 "2024-06-01" 读出来还是字符串,不是 date 对象
  • 浮点数精度可能有微小偏差(比如 0.1 + 0.2 != 0.3),JSON 本身不存精度信息
  • 如果 JSON 含有注释、尾随逗号、NaNInfinity,Python 的 json 模块会拒绝解析(标准 JSON 不支持这些)
  • 需要自定义反序列化逻辑(比如把某个字段当日期处理),得用 object_hook 参数

大文件别用 json.load() 一次性加载

几 MB 以上的 JSON 文件,全读进内存再解析,容易触发 MemoryError,而且启动慢。这时候得换思路。

  • 纯文本小改可用 jq 命令行工具预处理(如提取某字段),再喂给 Python
  • 真正的大 JSON(如日志流、导出数据),考虑用 ijson 库做流式解析,只取关心的键路径
  • json.load() 内部会先把整个文件读成字符串再解析,所以即使文件只有 10MB,内存占用可能翻倍
  • 如果只是查一两个字段,先用 grep 或正则粗筛(不推荐用于嵌套结构),比全量解析快得多
实际用的时候,最常卡住的不是语法,而是编码、路径、异常没兜住、以及以为 JSON 能存任意 Python 类型——它不能。JSON 就是个有限子集,别指望它记住你的 datetimeset
标签:Python