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

复杂嵌套JSON解析出现KeyError: 'notes'报错如何解决

Python requests解析接口返回KeyError: 'notes'解决方案

报错根因

  • 字段路径错误:从给出的响应片段可以看到,notes不是联系人对象的顶层字段,它嵌套在contact["qualification"]数组的子元素中,直接在contact顶层用contact["notes"]取值必然触发KeyError。
  • 无容错逻辑:原代码所有字段都用方括号强取,只要任意联系人条目缺少对应字段、或者字段值为null,都会直接抛出错误中断整个程序。
  • 隐藏逻辑bug:原代码url硬编码了page=1,循环中的page参数没有实际传入请求,永远只会爬取第一页数据。

修复后代码

import requests

base_url = "https://teams-api.grip.events/1/team/53806/event/123721/member/236388/contact/inbound_lead/reviewed"
headers = {
    'authorization': 'Bearer eaf3bd4b-6861-4ca2-a86e-3a96c73deac0',
}

with open("list31.txt", "w", encoding='utf-8') as f:
    for page in range(1, 1000):
        # 动态传入页码参数
        resp = requests.get(url=base_url, headers=headers, params={"page": page})
        resp_data = resp.json()
        contacts = resp_data.get("data", [])
        # 返回空数据时直接终止翻页
        if not contacts:
            break
        for contact in contacts:
            # 提取嵌套的notes字段,兼容数组为空、字段缺失的情况
            qualification_list = contact.get("qualification", [])
            notes_val = ""
            if qualification_list:
                notes_val = qualification_list[0].get("notes", "")
            
            # 按顺序拼接所有字段,缺省值统一为空字符串
            row = [
                contact.get("company_name", ""),
                contact.get("location", ""),
                contact.get("summary", ""),
                contact.get("job_title", ""),
                contact.get("name", ""),
                contact.get("job_industry", ""),
                contact.get("email", ""),
                contact.get("first_name", ""),
                contact.get("last_name", ""),
                notes_val
            ]
            # 处理null值,避免写入"None"文本
            format_row = "\t".join([str(item) if item is not None else "" for item in row])
            f.write(format_row + "\n")
            print(format_row)

关键修复点说明

  • 修正notes字段取值逻辑:从嵌套的qualification数组中提取,兼容数组为空、字段不存在的场景
  • 全字段增加容错:所有字段都用字典.get(字段名, 默认空值)的方式取值,不会因为个别条目缺字段触发KeyError
  • 修复翻页失效问题:移除url中硬编码的page参数,通过requests的params参数动态传入页码
  • 增加空页终止逻辑:当接口返回空联系人列表时直接停止循环,避免无效请求
  • 增加null值处理:接口返回null的字段会自动转为空字符串,不会把None字样写入导出文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:51:19