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

API分页调用循环优化咨询:解决无限循环与JSON解码错误

API分页数据遍历的正确实现方式

原代码存在的问题

  1. 遗漏了初始请求返回的第一页数据
  2. 未处理API请求失败场景(如返回非JSON响应),触发JSONDecodeError
  3. 循环终止条件不严谨,若Next字段异常可能导致无限循环
  4. 分页请求未复用认证头,可能因权限问题返回无效响应

修正后的实现代码

import requests

data = []
# 替换为你的初始请求信息
initial_url = "你的API初始URL"
request_headers = headersAPI
request_params = params

# 处理第一页数据
try:
    response = requests.get(initial_url, headers=request_headers, params=request_params, verify=True)
    response.raise_for_status()  # 检查HTTP请求是否成功
    api_response = response.json()
    # 加入第一页数据
    data.extend(api_response['Data']['Rows'])
    
    # 获取下一页URL,用get避免字段缺失报错
    next_page_url = api_response['Data']['Paging'].get('Next')
    
    # 分页循环遍历
    while next_page_url:
        response = requests.get(next_page_url, headers=request_headers, verify=True)
        response.raise_for_status()
        api_response = response.json()
        
        # 追加当前页数据
        if 'Rows' in api_response['Data']:
            data.extend(api_response['Data']['Rows'])
        
        # 更新下一页URL,无则返回None终止循环
        next_page_url = api_response['Data']['Paging'].get('Next')
        
except requests.exceptions.HTTPError as err:
    print(f"HTTP请求错误: {err}")
except ValueError as err:
    print(f"JSON解析失败: {err}")
except KeyError as err:
    print(f"响应结构缺失字段: {err}")

print(f"累计获取数据条数: {len(data)}")

关键改进说明

  • 捕获初始页数据:确保第一页的Rows不会被遗漏
  • 异常兜底处理:覆盖HTTP错误、JSON解析失败、字段缺失等场景,避免程序崩溃或无限循环
  • 安全的字段访问:使用dict.get()获取Next字段,即使响应结构变化也不会直接抛出KeyError
  • 复用请求头:所有请求携带认证信息,保证分页请求的权限有效性
  • 明确终止逻辑:当next_page_url为None或空值时,自动退出循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:12:46