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
相关产品推荐
相关产品推荐

