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

如何利用shell返回的逗号分隔列表,通过jq筛选符合条件的JSON对象

错误原因

你遇到的报错是两个问题叠加导致的:

  • 你直接把shell命令$(./getClasses.sh)写在了jq的单引号过滤规则里,单引号会阻止shell做命令展开,jq会把这段内容当成自身语法解析,自然报错
  • jq没有included这个内置函数,小写in运算符是用来检查对象的键是否存在,不是用来检查元素是否在数组里的,检查数组包含元素要用到大写的IN运算符(jq 1.5及以上版本支持)或者index函数。

正确实现方案

通过jq的--arg参数把脚本输出的逗号分隔列表传入jq内部,再拆分后做过滤即可:

写法1(兼容所有jq版本)

jq --arg allowed_classes "$(./getClasses.sh)" '.result.coverage.coverage[] | select(.name == ($allowed_classes | split(",")[]))' tests.json

写法2(jq 1.5+,大列表性能更好)

jq --arg allowed_classes "$(./getClasses.sh)" '.result.coverage.coverage[] | select(.name IN($allowed_classes | split(",")))' tests.json

逻辑说明

  • --arg allowed_classes "$(./getClasses.sh)":提前执行你的脚本,把返回的逗号分隔字符串作为jq内部变量$allowed_classes传入,避免shell引用和转义问题
  • $allowed_classes | split(","):把逗号分隔的类名字符串拆成jq内部的数组结构
  • select过滤逻辑:只保留name字段在上述数组内的对象

按照你的示例数据,如果./getClasses.sh返回ApexClass1,ApexClass2,执行命令后会返回前两个类的覆盖率对象,符合需求。

内容的提问来源于stack exchange,提问作者Patlatus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:11