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

Python转非标准数据为JSON提取字段报AttributeError解决方法

问题解答

核心结论

完全不需要将转换后的JSON结果落盘存储为文件再读取解析。你遇到的报错是json模块API调用错误导致的,直接调整内存处理逻辑即可实现字段提取需求,额外增加文件读写步骤属于冗余IO操作,没有必要。

报错原因

触发AttributeError: 'list' object has no attribute 'read'的根因是方法使用错误:

  • json.load()的入参要求必须是实现了read()方法的类文件对象(比如通过open()打开的本地文件句柄),你直接将内存中存储的Python列表对象传入该方法,自然会触发属性不存在的错误。

无落盘的字段提取实现

根据你当前转换结果的存储形式,选择对应方案即可:

场景1:转换结果为内存中的Python原生列表

如果你跑完非结构化运动员信息转换逻辑后,得到的结果本身就是Python原生列表(每个元素为存储单条运动员信息的字典),完全不需要走JSON序列化、反序列化流程,直接遍历列表提取目标字段即可:

# 假设convert_result是转换逻辑执行完成后得到的列表,结构示例:[{"name":"苏炳添", "type":"田径短跑", "age":33, ...}, ...]
for record in convert_result:
    # 可根据你需要的输出格式调整拼接规则,以下为示例输出
    print(f"name: {record.get('name')}, type: {record.get('type')}")

场景2:转换结果为内存中的JSON格式字符串

如果你已经将转换结果序列化为JSON格式的字符串存在内存变量中,不需要写入文件,换用json.loads()方法解析即可——该方法专门用于加载内存中的JSON格式字符串,解析完成后直接遍历提取字段:

import json

# 假设json_str是转换生成的JSON字符串,示例值:'[{"name":"苏炳添", "type":"田径短跑", ...}]'
convert_result = json.loads(json_str)
for record in convert_result:
    print(f"name: {record.get('name')}, type: {record.get('type')}")

补充说明:json.load()仅在需要读取本地磁盘存储的JSON文件时使用,对应写法示例:

import json
# 读取本地JSON文件的标准写法
with open("athlete_data.json", "r", encoding="utf-8") as f:
    records = json.load(f)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:51:24