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

Python读取JSON对象值报错:TypeError: string indices must be integers

解决JSON字典中提取报告ID的TypeError问题

嘿,我一眼就看出问题出在哪了!你遍历files["reports"]的时候,默认拿到的是字典的键(也就是那些"1"、"2"、"3"这类字符串),而不是对应的报告对象,所以当你尝试reports["id"]时,自然会触发TypeError——字符串只能用整数当索引嘛。

问题根源分析

你提供的JSON结构里,reports是一个嵌套字典,而不是列表:

{ "reports": { "1": { "id": "123" }, "2": { "id": "122" }, "3": { "id": "121" } } }

这里的"1"、"2"是字典的键,对应的值才是包含id的报告对象。Python中直接遍历字典时,默认只会返回键,这就是你看到的“删除["id"]后仅显示报告名称(如1、2、3)”的原因——那些其实是字典的键,不是报告名称。

修复后的代码

你只需要修改遍历方式,直接获取字典里的值即可:

方案一:仅提取ID(最简洁)

for files in result:
    # 遍历reports字典的所有值(即每个报告对象)
    for report in files["reports"].values():
        print(report["id"])

方案二:同时获取键和ID(如果需要用到键的话)

如果你还需要用到"1"、"2"这些键,可以用items()同时获取键和值:

for files in result:
    # 同时拿到报告的键和对应的对象
    for report_key, report in files["reports"].items():
        print(f"报告编号: {report_key}, 报告ID: {report['id']}")

验证效果

运行修改后的代码,就能正确输出所有报告的ID:123、122、121、120...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:19:46