Python抓取JSON遇TypeError:列表索引需为整数而非字符串
解决JSON遍历中的TypeError: list indices must be integers or slices, not str问题
问题诊断
你触发的TypeError核心原因是误判了JSON的顶层结构:json.loads返回的不是列表,而是一个字典。你试图用整数索引data_json[0]访问字典,而字典的索引只能是字符串(或可哈希类型),因此报错。
目标JSON的顶层结构为{"data": [{}, {}, ...]},真正需要遍历的列表是字典中"data"键对应的值,而非直接对顶层对象使用整数索引。
修正后的代码
from urllib.request import urlopen import json url = "https://textdoc.co/lJAxGYXgcZ9V4NUB" response = urlopen(url) data_json = json.loads(response.read()) # 先从顶层字典中取出列表数据 data_list = data_json["data"] # 遍历G类别数据 for i in data_list[0]["data"]: print(f'Date: {i[0]} , Value : {i[1]}') # 遍历I类别数据 for i in data_list[1]["data"]: print(f'Date: {i[0]} , Value : {i[1]}') # 遍历E类别数据 for i in data_list[2]["data"]: print(f'Date: {i[0]} , Value : {i[1]}') # 遍历C类别数据 for i in data_list[3]["data"]: print(f'Date: {i[0]} , Value : {i[1]}') # 遍历SC类别数据 for i in data_list[4]["data"]: print(f'Date: {i[0]} , Value : {i[1]}')
代码优化(可选)
可以通过循环批量处理所有类别,避免重复代码:
from urllib.request import urlopen import json url = "https://textdoc.co/lJAxGYXgcZ9V4NUB" response = urlopen(url) data_json = json.loads(response.read()) data_list = data_json["data"] # 对应各个类别的名称 category_names = ["G", "I", "E", "C", "SC"] for idx, category in enumerate(category_names): print(f"\n=== {category} 类别数据 ===") for item in data_list[idx]["data"]: print(f'Date: {item[0]} , Value : {item[1]}')
关键说明
json.loads的返回类型完全取决于原始JSON的结构:
- 如果JSON顶层是
[...],则返回列表; - 如果JSON顶层是
{...},则返回字典。
在处理前可以先打印type(data_json)或print(data_json)确认结构,避免索引类型错误。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

