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

使用jq筛选JSON数组元素时出现异常,求正确实现方法

jq筛选JSON数组元素的错误分析与解决方法

问题情况

你用jq筛选JSON数组中statusId == "10270"的元素时踩了坑:

  • 执行.issuesData.issues[]能正常输出数组里的每个元素;
  • 用.issuesData.issues[].statusId="10270"得到的是所有元素statusId被改成10270的数组,这不是筛选;
  • 用.issuesData.issues[].statusId=="10270"得到的是[false, true]的布尔数组,只能看到哪些元素符合,拿不到元素本身。

你需要的是获取符合条件的元素本身,或者它们的key字段,对应的JSON结构如下:

{"issuesData": {"issues": [{"id": 3619364,"key": "AIG-1992","hidden": false,"typeId": "1","summary": "XXXXXX","priorityId": "2","done": false,"assignee": "XXXX","assigneeName": "XXXX","hasCustomUserAvatar": false,"autoUserAvatar": {"letter": "B","color": "#d39c3f"},"color": "#ff0000","epicId": "3557134","epic": "AIG-1","estimateStatisticRequired": false,"statusId": "10370","fixVersions": [120044],"projectId": 49202},{"id": 3617950,"key": "AIG-1938","hidden": false,"typeId": "1","summary": "YYYYYY","priorityId": "2","done": false,"assignee": "YYYY","assigneeName": "YYY","hasCustomUserAvatar": false,"autoUserAvatar": {"letter": "F","color": "#7bc1a1"},"color": "#ff0000","epicId": "3658470","epic": "AIG-574","estimateStatisticRequired": false,"statusId": "10270","fixVersions": [],"projectId": 49202}]}}

错误原因

  • .issuesData.issues[].statusId="10270"是赋值操作,遍历数组每个元素把statusId改成目标值,返回修改后的数组,不是筛选;
  • .issuesData.issues[].statusId=="10270"是逐个判断元素的statusId是否匹配,返回的是每个判断的结果,不是符合条件的元素。

正确操作

1. 获取符合条件的完整元素

用select()函数筛选,语法如下:

.issuesData.issues[] | select(.statusId == "10270")

执行后直接输出符合条件的元素:

{"id":3617950,"key":"AIG-1938","hidden":false,"typeId":"1","summary":"YYYYYY","priorityId":"2","done":false,"assignee":"YYYY","assigneeName":"YYY","hasCustomUserAvatar":false,"autoUserAvatar":{"letter":"F","color":"#7bc1a1"},"color":"#ff0000","epicId":"3658470","epic":"AIG-574","estimateStatisticRequired":false,"statusId":"10270","fixVersions":[],"projectId":49202}

2. 获取符合条件元素的key字段

在筛选后追加提取key的操作:

.issuesData.issues[] | select(.statusId == "10270") | .key

执行后输出:

"AIG-1938"

3. 返回包含符合条件元素的数组

如果需要结果是数组形式(哪怕只有一个元素),可以用map():

.issuesData.issues | map(select(.statusId == "10270"))

执行后输出:

[{"id":3617950,"key":"AIG-1938","hidden":false,"typeId":"1","summary":"YYYYYY","priorityId":"2","done":false,"assignee":"YYYY","assigneeName":"YYY","hasCustomUserAvatar":false,"autoUserAvatar":{"letter":"F","color":"#7bc1a1"},"color":"#ff0000","epicId":"3658470","epic":"AIG-574","estimateStatisticRequired":false,"statusId":"10270","fixVersions":[],"projectId":49202}]

内容的提问来源于stack exchange,提问作者Daniel Ferreira Castro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:00:37