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

提取嵌套JSON警告信息时触发TypeError错误求助

错误原因分析

你的代码触发TypeError: string indices must be integers的核心问题是:

  • 你错误地将result["warnings"]当作列表遍历,但实际上它是一个字典,键为terms、teachers、courses、enrollments等字符串。循环时w会变成这些字符串键,此时访问w["enrollments"]相当于用字符串索引另一个字符串,自然触发错误。
  • 原代码的遍历层级完全不符合JSON结构,且只处理了enrollments一类警告,未覆盖需求中的所有类别。
修复后的完整代码实现

以下代码会正确提取terms、enrollments、courses、teachers四类警告信息,并存入对应列表:

import json

# 假设你已定义对应警告类(根据实际需求调整)
class TermWarnings:
    def __init__(self, warning_data):
        self.type = warning_data.get("type")
        self.message = warning_data.get("message")
        self.affected_items = warning_data.get("list", [])

class EnrollmentWarnings:
    def __init__(self, warn_type, emplid):
        self.warning_type = warn_type
        self.student_emplid = emplid

class CourseWarnings:
    def __init__(self, warning_data):
        self.type = warning_data.get("type")
        self.message = warning_data.get("message")
        self.affected_items = warning_data.get("list", [])

class TeacherWarnings:
    def __init__(self, warning_data):
        self.type = warning_data.get("type")
        self.message = warning_data.get("message")
        self.affected_items = warning_data.get("list", [])

# 初始化存储列表
term_warnings = []
enrollment_warnings = []
course_warnings = []
teacher_warnings = []

# 读取并解析JSON文件
with open("sample_result.json", "r") as f:
    data = json.load(f)

# 直接定位到警告字典
warnings_container = data["data"]["attributes"]["result"]["warnings"]

# 提取terms类别警告
for warn in warnings_container["terms"]:
    term_warnings.append(TermWarnings(warn))

# 提取enrollments类别警告
for enroll_warn in warnings_container["enrollments"]:
    warn_type = enroll_warn["type"]
    # 遍历每个受影响的学生ID
    for emplid in enroll_warn["list"]:
        enrollment_warnings.append(EnrollmentWarnings(warn_type, emplid))

# 提取courses类别警告
for warn in warnings_container["courses"]:
    course_warnings.append(CourseWarnings(warn))

# 提取teachers类别警告
for warn in warnings_container["teachers"]:
    teacher_warnings.append(TeacherWarnings(warn))
关键修复说明
  1. 正确定位数据结构:直接通过键名访问warnings_container下的四类警告,而非错误遍历字典键。
  2. 匹配JSON层级:针对enrollments的结构(列表中每个元素是包含type、message、list的字典),先遍历警告条目,再遍历其中的受影响ID列表。
  3. 规范文件操作:使用with语句管理文件流,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:54:51