如何在Jira Server Scriptrunner中获取原始单行描述解析Markdown表为JSON
解决Jira Scriptrunner中获取描述原始带\r\n字符串的问题
我需要用Scriptrunner for Jira Server(Groovy/Java)把Jira问题描述里的Markdown表格转换成指定格式的JSON字符串,表格结构固定,对应的正则表达式已经确定。通过REST API查看描述字段时,它是包含\r\n的单行格式,但调用issue.getDescription()获取时,\r\n被解析成了实际换行,导致正则无法匹配。请问怎么获取原始的带\r\n的单行字符串让正则生效?当前使用的代码片段如下:
import com.atlassian.jira.component.ComponentAccessor import java.io.IOException import com.atlassian.jira.issue.Issue import groovy.json.* import org.apache.log4j.Level import java.util.regex.Matcher; import java.util.regex.Pattern; log.setLevel(Level.INFO); def issue = issueManager.getIssueObject('PTIJ-68') def description_raw = issue.getDescription() log.info("issue.getDescription() = ${issue.getDescription().toString()}")
解决方案
issue.getDescription()返回的是经过Jira渲染处理后的文本,换行符已被转换为实际换行,无法满足正则匹配需求。要获取保留\r\n的原始存储值,需通过字段管理器获取描述系统字段,再调用getOriginalValue()方法:
import com.atlassian.jira.component.ComponentAccessor import org.apache.log4j.Level log.setLevel(Level.INFO); def issueManager = ComponentAccessor.getIssueManager() def issue = issueManager.getIssueObject('PTIJ-68') // 获取描述系统字段实例 def fieldManager = ComponentAccessor.getFieldManager() def descriptionField = fieldManager.getSystemField(com.atlassian.jira.issue.fields.SystemField.ID_DESCRIPTION) // 获取原始存储值,保留\r\n def descriptionRaw = issue.getOriginalValue(descriptionField) log.info("原始描述值(带\\r\\n): ${descriptionRaw}")
说明
getOriginalValue()方法直接返回字段在数据库中存储的原始字符串,不会对换行符做解析转换,得到的格式和REST API返回的一致,能确保正则表达式正常匹配。- 也可以用
issue.getFieldValue(descriptionField)替代getOriginalValue(),但前者在字段有修改历史时可能返回经过处理的值,getOriginalValue()更稳定可靠。
内容的提问来源于stack exchange,提问作者Odyseus_v4
相关产品推荐
相关产品推荐

