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

Jira API分页迭代无法更新startAt拉取全量7000条记录问题求助

Jira API分页拉取全量数据修复方案

原代码存在的核心问题

  • 全量数据容器data定义在while循环内部,每次翻页都会清空之前已拉取的历史数据
  • 变量名不匹配:接口返回的问题列表赋值给了jiraIssues,但遍历用的是未定义的issues,会触发命名错误
  • 分页参数更新逻辑位置错误:maxResults、total、startAt的更新代码写在单条issue遍历的循环内,会重复执行导致分页逻辑混乱
  • 字段读取对象错误:分页参数需从JSON解析后的r对象中读取,不能直接从requests响应对象取值
  • while循环的else分支直接加了break,第一次拉取完成后就会终止循环,无法继续翻页
  • 初始请求未指定maxResults参数,Jira默认仅返回50条结果,需显式拼接&maxResults=1000到请求地址
  • 存在冗余的JSON序列化/反序列化操作:已经拿到JSON格式的issues列表,不需要再执行dumps后loads的操作,可直接传给pd.json_normalize

修复后可运行代码

import requests
import pandas as pd

# 基础配置
username = "你的Jira账号"
password = "你的Jira密码/API令牌"
# 直接在请求地址中固定单页返回条数
baseUrl = "https://example.com/rest/api/2/search?jql=issuetype='Story'&maxResults=1000"
total = 1
startAt = 0
maxResults = 1000
all_data = []

while startAt < total:
    # 发起分页请求
    response = requests.get(f"{baseUrl}&startAt={startAt}", auth=(username, password))
    print(f"请求起始位置startAt={startAt},响应状态码:{response.status_code}")
    r = response.json()
    
    # 更新全量数据总条数
    total = r["total"]
    current_page_issues = r["issues"]
    
    # 处理当前页数据,直接转为DataFrame存入全量列表
    df_page = pd.json_normalize(current_page_issues)
    all_data.append(df_page)
    
    # 更新下一页的起始位置
    startAt += maxResults
    print(f"当前页返回条数:{len(current_page_issues)},下一页起始位置:{startAt}\n----------")

# 拼接所有页数据为单个DataFrame
final_df = pd.concat(all_data, ignore_index=True)
print(f"全量数据拉取完成,总条数:{len(final_df)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:24:07