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
相关产品推荐
相关产品推荐

