You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取JSON文件时报AttributeError: 'str'对象无'read'属性错误

错误诱发原因
  • 报错核心是json.load()的入参类型不符合要求:该方法需要传入实现了read()方法的类文件对象(比如open()返回的文件句柄),方法内部会自动调用对象的read()方法读取内容再做JSON解析;如果传入的是字符串类型,方法尝试调用read()时就会抛出'str' object has no attribute 'read'的错误。
  • 对应你提供的代码,问题是手滑传错了变量:with open(fileName) as jsonFile这行已经拿到了打开的文件对象jsonFile,但你传给json.load()的却是fileName——也就是传入函数的文件路径字符串,刚好触发上述类型错误。
修复方案
  • 第一步:修正json.load()的入参,把传入的路径字符串fileName替换为打开的文件对象jsonFile即可解决当前报错。
  • 额外优化:打开文件时显式指定encoding='utf-8',避免跨系统运行时因为默认编码不一致导致JSON解析乱码、报错。
  • 注意提前导入json标准库,否则会触发NameError。

修正后的可运行代码如下:

import json

def jsonLang(fileName):
    with open(fileName, encoding='utf-8') as jsonFile:
        jsonData = json.load(jsonFile)
        print(jsonData)


jsonLang("/users/sully/repos/30DaysOfPython/textCount/countries_data.json")

补充说明

注意区分json模块两个常用解析方法的使用场景,避免传参错误:

  • json.load(文件对象):直接接收打开的文件句柄,自动读取内容解析,适合读取本地JSON文件的场景
  • json.loads(JSON格式字符串):接收字符串类型的JSON内容做解析,如果你手动调用文件对象.read()拿到了文件内容字符串,就需要用这个方法解析,不要混用。

内容的提问来源于stack exchange,提问作者Balagadoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:54:19