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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:50:28