Python3解析JSON文件报错:'dict'对象无'loads'属性
Python解析JSON文件报错AttributeError的排查与解决
问题核心
你运行代码时遇到AttributeError: 'dict' object has no attribute 'loads',本质原因是代码里的json变量被覆盖了——你在上下文某处定义了一个名为json的字典,导致原本调用标准库json模块的操作,变成了对字典对象的调用,而字典自然没有loads/load方法。
排查步骤
- 全局搜索代码中所有
json = ...的定义,找到那个覆盖了标准库模块的字典变量。 - 确认代码顶部是否有
import json语句——如果没有,原本会报NameError,但你现在是AttributeError,说明一定有变量覆盖了json。
解决方法
1. 重命名冲突变量
把所有命名为json的自定义变量改成其他名称(比如json_data、local_json),避免和标准库模块名冲突。
2. 修复后的代码示例
推荐使用json.load直接读取文件对象(更高效,无需手动读取字符串):
import json # 必须确保顶部导入标准库json模块 for crf in crf_ranges: vmaf_output_crf_list_log = job['config']['output_dir'] + '/' + build_name(stream) + f'/vmaf_{crf}.json' with open(vmaf_output_crf_list_log, 'r') as json_vmaf_file: vm = json.load(json_vmaf_file) vmaf_values.append((crf, vm["pooled_metrics"]["vmaf"]["harmonic_mean"]))
如果坚持使用json.loads,需要先读取文件内容为字符串:
import json for crf in crf_ranges: vmaf_output_crf_list_log = job['config']['output_dir'] + '/' + build_name(stream) + f'/vmaf_{crf}.json' with open(vmaf_output_crf_list_log, 'r') as json_vmaf_file: json_content = json_vmaf_file.read() vm = json.loads(json_content) vmaf_values.append((crf, vm["pooled_metrics"]["vmaf"]["harmonic_mean"]))
额外注意事项
你提供的JSON示例存在多余尾逗号(比如"integer_vif_scale2": 0.997330,和},在frames数组末尾),虽然部分在线验证器会忽略,但Python的json模块在默认严格模式下会抛出JSONDecodeError。如果后续遇到该错误,需要删除这些多余的逗号。
内容的提问来源于stack exchange,提问作者Martin Hammer
相关产品推荐
相关产品推荐

