如何通过Python结合Jira Rest API从JSON提取指定状态缺陷的报告人信息
嘿,我来帮你搞定从JIRA返回的结果里提取你要的信息!分两种常见情况给你讲,对应你代码里用到的工具:
提取目标信息的方法
如果你用的是官方jira Python库(你的代码里已经导入了)
当你执行搜索后,得到的是Issue对象的列表,直接从对象里取字段就行,不用手动解析JSON。先补全你的代码,然后提取信息:
# 先完成JIRA认证(用你的用户名+密码/API Token) jira = JIRA(server=serverURL, basic_auth=('你的用户名', '你的认证信息')) # 补全你的JQL查询语句,确保条件完整 query = 'project = SWDEV AND issuetype = Defect AND status in (Implemented, Rejected) AND "Deliverable ID" = "17.50 Sustaining [969960]"' # 执行查询获取Issue列表 issues = jira.search_issues(query) # 遍历每个Issue提取你要的信息 for issue in issues: # 问题核心标识和摘要 issue_key = issue.key issue_summary = issue.fields.summary # 报告人姓名和邮箱 reporter_name = issue.fields.reporter.displayName reporter_email = issue.fields.reporter.emailAddress # 验证状态(可选,因为查询已经过滤了) issue_status = issue.fields.status.name # 提取自定义字段「Deliverable ID」 # 注意:JIRA自定义字段在API里用「customfield_XXXXXX」格式,你需要替换成实际的字段ID # 怎么找ID?可以用jira.fields()打印所有字段,找到对应「Deliverable ID」的ID deliverable_id = issue.fields.customfield_XXXXXX # 输出或者存储信息,这里用打印示例 print(f"问题Key: {issue_key}") print(f"摘要: {issue_summary}") print(f"报告人姓名: {reporter_name}") print(f"报告人邮箱: {reporter_email}") print(f"状态: {issue_status}") print(f"Deliverable ID: {deliverable_id}") print("---")
如果你是直接调用JIRA REST API拿到JSON数据(比如用requests)
如果是通过requests发请求得到的JSON响应,那要按JSON的层级来解析:
import requests import urllib import base64 # 配置请求头和URL headers = { "Authorization": "Basic " + base64.b64encode(b"你的用户名:你的认证信息").decode('utf-8'), "Content-Type": "application/json" } # 补全JQL并转义 query = 'project = SWDEV AND issuetype = Defect AND status in (Implemented, Rejected) AND "Deliverable ID" = "17.50 Sustaining [969960]"' encoded_query = urllib.parse.quote(query) url = f"{serverURL}/rest/api/2/search?jql={encoded_query}" # 发送请求获取JSON数据 response = requests.get(url, headers=headers) json_data = response.json() # 遍历JSON里的issues数组提取信息 for issue in json_data['issues']: issue_key = issue['key'] issue_summary = issue['fields']['summary'] # 报告人信息 reporter_name = issue['fields']['reporter']['displayName'] reporter_email = issue['fields']['reporter']['emailAddress'] # 状态信息 issue_status = issue['fields']['status']['name'] # 自定义字段「Deliverable ID」,替换成实际的customfield_XXXXXX deliverable_id = issue['fields']['customfield_XXXXXX'] # 输出信息 print(f"问题Key: {issue_key}") print(f"摘要: {issue_summary}") print(f"报告人姓名: {reporter_name}") print(f"报告人邮箱: {reporter_email}") print(f"状态: {issue_status}") print(f"Deliverable ID: {deliverable_id}") print("---")
小技巧
- 关于自定义字段
Deliverable ID的ID:你可以通过这两种方式找:- 用
jira.fields()方法(官方库)打印所有字段,搜索「Deliverable ID」对应的id值; - 随便打开一个包含该字段的JIRA问题,查看页面源代码或者API响应,找到对应字段的键。
- 用
- 记得把你的JQL查询补全,不要留
"T...这样的截断内容哦!
内容的提问来源于stack exchange,提问作者user3254437




