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

如何移除JSON输出中的^M字符?并完善JIRA REST API数据提取代码

解决JIRA API数据提取与^M字符清理问题

我帮你整理了完整的解决方案,涵盖调用JIRA REST API获取数据、保存JSON文件、提取指定字段,以及移除恼人的^M(回车符\r)字符的全部步骤,代码可直接运行:

完整代码实现

import requests
import json
import csv
import sys

def main():
    # 替换为你的JIRA用户名和API令牌/密码(云版JIRA建议用API令牌)
    jira_username = "your_jira_username"
    jira_password = "your_api_token_or_password"
    
    headers = {
        'Content-Type': 'application/json',
    }
    params = (
        ('jql', 'project="Technology" AND summary~"workspace creation*" AND issuetype="Task" AND status!="DONE"'),
        # 可调整maxResults获取更多结果,默认返回50条
        ('maxResults', '100')
    )
    
    try:
        # 发送GET请求到JIRA API
        response = requests.get(
            'https://jira.company.com/rest/api/2/search',
            headers=headers,
            params=params,
            auth=(jira_username, jira_password)
        )
        response.raise_for_status()  # 检查请求是否成功
        
        # 清理^M字符(即Windows回车符\r)
        cleaned_response_text = response.text.replace('\r', '')
        
        # 保存清理后的JSON到本地文件
        with open('1.json', 'w', encoding='utf-8') as f:
            f.write(cleaned_response_text)
        print("✅ JSON文件已保存为1.json,且已移除所有^M字符")
        
        # 从JSON文件提取JIRA密钥(key)和描述(description)
        with open('1.json', 'r', encoding='utf-8') as f:
            jira_data = json.load(f)
        
        extracted_issues = []
        for issue in jira_data.get('issues', []):
            issue_key = issue.get('key')
            raw_description = issue.get('fields', {}).get('description', '')
            # 可选:清理描述中的换行符,让文本更规整
            cleaned_description = raw_description.replace('\n', ' ') if raw_description else ''
            extracted_issues.append({
                'jira_key': issue_key,
                'description': cleaned_description
            })
        
        # 将提取的数据保存为CSV(方便后续查看/处理)
        with open('extracted_jira_issues.csv', 'w', newline='', encoding='utf-8') as csvfile:
            fieldnames = ['jira_key', 'description']
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
            writer.writeheader()
            writer.writerows(extracted_issues)
        print("✅ 已成功提取JIRA密钥和描述,保存为extracted_jira_issues.csv")
        
    except requests.exceptions.RequestException as e:
        print(f"❌ 请求JIRA API时出错: {e}")
        sys.exit(1)
    except json.JSONDecodeError as e:
        print(f"❌ 解析JSON数据时出错: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main()

关键步骤解释

1. JIRA API认证处理

JIRA的REST API需要基本认证,你需要替换代码中的jira_username和jira_password为你的账号信息:如果是云版JIRA,建议使用官方生成的API令牌代替密码,安全性更高。

2. 移除^M字符的原理

^M其实是ASCII中的回车符\r,通常是Windows系统下的换行格式残留。我们直接在API响应文本中用replace('\r', '')批量移除,确保生成的JSON文件没有异常字符,避免后续解析报错。

3. 字段提取逻辑

JIRA返回的JSON结构中:

  • JIRA密钥直接对应issue['key']
  • 描述字段在issue['fields']['description'],代码中做了空值处理,避免因某个issue无描述而抛出异常;同时可选清理换行符,让输出更规整。

4. 异常处理

添加了请求异常和JSON解析异常的捕获,遇到问题时会清晰提示错误原因,让代码更健壮。

额外提示

  • 如果返回的issue数量超过maxResults设置的数值,可以添加startAt参数实现分页获取所有结果
  • 如果描述字段包含HTML格式(JIRA富文本编辑),可以用正则表达式re.sub('<.*?>', '', raw_description)进一步提取纯文本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:20:30