移除JIRA导出JSON字段中的\n换行符,解决DataFrame解析异常
解决JIRA JSON字段换行符问题及文件读取错误
一、先修复strip()调用错误
你之前的代码报错是因为inputfile是文件对象,不是字符串,不能直接调用strip()。得先把文件内容读取成字符串再处理:
with open(fInput, encoding='utf-16') as inputfile: # 读取文件全部内容为字符串 content = inputfile.read() # 此时可以用strip()清理文本首尾的空白 content = content.strip()
二、移除JSON字段里的换行符
有两种实用方法,按需选择:
方法1:全局替换(简单粗暴,适合快速处理)
如果不需要保留任何换行符,读取内容后直接全局替换\n:
import json with open(fInput, encoding='utf-16') as inputfile: # 读取并替换所有换行符 content = inputfile.read().replace('\n', '') jira_data = json.loads(content)
这种方法会去掉所有换行(包括JSON结构里的换行,但JSON解析不依赖格式换行,所以不影响),适合字段值里的换行需要全部清除的场景。
方法2:解析后精准清理(保留JSON结构,更灵活)
如果只想清理字段值里的换行,不破坏JSON的层级结构,用递归遍历处理更稳妥:
import json import pandas as pd with open(fInput, encoding='utf-16') as inputfile: jira_data = json.load(inputfile) # 递归遍历所有元素,清理字符串类型值的换行 def clean_newlines(obj): if isinstance(obj, str): # 替换换行符为空,再清理首尾空白 return obj.replace('\n', '').strip() elif isinstance(obj, dict): return {k: clean_newlines(v) for k, v in obj.items()} elif isinstance(obj, list): return [clean_newlines(item) for item in obj] else: return obj # 得到清理后的数据 cleaned_data = clean_newlines(jira_data) # 提取issues列表转换为DataFrame df = pd.DataFrame([issue['fields'] for issue in cleaned_data['issues']])
这种方法会自动处理嵌套的字段(比如示例里的summary),只清理字符串内容里的换行,不影响其他类型的字段(比如null、数字)。
完整可运行代码
import json import pandas as pd # 替换成你的文件路径 fInput = "jira_response.txt" # 读取JSON文件 with open(fInput, encoding='utf-16') as inputfile: jira_data = json.load(inputfile) # 递归清理字段中的换行符 def clean_field_values(obj): if isinstance(obj, str): return obj.replace('\n', '').strip() elif isinstance(obj, dict): return {key: clean_field_values(value) for key, value in obj.items()} elif isinstance(obj, list): return [clean_field_values(item) for item in obj] else: return obj cleaned_jira_data = clean_field_values(jira_data) # 转换为DataFrame df = pd.DataFrame([issue['fields'] for issue in cleaned_jira_data['issues']]) print(df)
内容的提问来源于stack exchange,提问作者reddwarfcrew
相关产品推荐
相关产品推荐

