如何用jq筛选JIRA Insights API JSON中指定条件的属性值?
仅用jq就能实现你的需求,完全不需要额外工具!
我来给你拆解具体的实现逻辑和命令:
首先,你的数据是同一实体(按objectId区分)的多个属性条目,核心思路是先按objectId分组,再在每个组里判断是否满足objectTypeAttributeId=911且状态为Active的条件,最后提取你需要的属性值。
具体jq命令
假设你的JSON数据保存在data.json文件中,运行以下命令即可:
# 按objectId分组,遍历每个分组 group_by(.objectId)[] # 筛选出包含符合条件的911属性的分组 | select(any(.[]; .objectTypeAttributeId == 911 and .objectAttributeValues[0].status.name == "Active")) # 提取需要的信息,构造输出对象 | { "objectId": .[0].objectId, "attr_887_value": (.[] | select(.objectTypeAttributeId == 887) | .objectAttributeValues[0].value), # 替换XXX为你想要的另一个objectTypeAttributeId,name字段根据实际JSON结构调整 "attr_XXX_name": (.[] | select(.objectTypeAttributeId == XXX) | .name) }
命令解释
group_by(.objectId)[]:把所有属性条目按objectId归类到同一组,确保我们处理的是同一个实体的所有属性。select(any(.[]; ...)):检查当前分组里是否存在满足条件的条目——也就是objectTypeAttributeId=911,且其status.name为"Active"。- 构造输出对象:
objectId:取分组内任意条目的objectId(同组所有条目都属于同一个实体)。attr_887_value:筛选出分组内objectTypeAttributeId=887的条目,提取它的value值。attr_XXX_name:替换XXX为你指定的另一个objectTypeAttributeId,如果你的JSON里该属性条目有name字段就直接提取;如果是要提取value,就把.name改成.objectAttributeValues[0].value。
针对你提供的JSON片段的测试结果
用你给出的示例数据运行命令(假设提取objectTypeAttributeId=888的value),输出会是:
{ "objectId": 9036, "attr_887_value": "false", "attr_888_value": "false" }
额外注意事项
- 如果某个实体缺少
887或指定的目标属性,jq会返回null,如果想过滤掉这类情况,可以在select里追加判断条件,比如select(any(.[]; .objectTypeAttributeId == 887))。 - 如果
objectAttributeValues数组可能包含多个元素,你可以调整提取逻辑,比如用.objectAttributeValues[].value获取所有值,或者用first(.objectAttributeValues[]?.value)确保取第一个有效值。
内容的提问来源于stack exchange,提问作者JohanB
相关产品推荐
相关产品推荐

