Groovy处理Jira变更日志JSON遇MissingPropertyException问题求助
Groovy处理Jira变更日志JSON的问题解决方案
问题1报错修复
issue.findAll {it.field == "Total Votes"}抛出MissingPropertyException,是因为issue是LinkedHashMap的Entry集合,每个迭代元素it是键值对(Entry对象),它本身没有field属性——field是变更日志里items数组中单个元素的属性。
正确的遍历逻辑是先拿到每个变更日志条目(Entry的value),再筛选条目下的目标字段:
def filteredChanges = issue.collectMany { entry -> // entry.value 对应单个变更日志条目,包含displayName、created、items等属性 entry.value.items.findAll { item -> item.field == "Total Votes" }.collect { item -> // 合并外层关联信息与item字段 [ displayName: entry.value.displayName, created: entry.value.created, field: item.field, toString: item.toString ] } }.findAll() // 过滤空结果
问题2:保留关联信息的正确方式
用issue.values.items.flatten()会丢失displayName、created这类外层信息,原因是flatten仅提取了items的元素,未将其与所属的变更条目绑定。上述代码通过collectMany嵌套collect,把符合条件的item和它所属的变更条目信息合并成新Map,确保所有需要的字段都被保留。
示例输出
执行后filteredChanges会生成指定格式的列表:
[ [displayName: "张三", created: "2024-05-20T10:30:00.000+0800", field: "Total Votes", toString: "Votes changed from 5 to 8"], [displayName: "李四", created: "2024-05-21T14:15:00.000+0800", field: "Total Votes", toString: "Votes changed from 8 to 10"] ]
内容的提问来源于stack exchange,提问作者kya
相关产品推荐
相关产品推荐

