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

如何在未知上层键名时从JSON数组筛选指定stack的deploymentId

解决方法

直接用这条jq命令即可满足需求:

jq -r '.s[] | .[] | select(.stack == "c_c") | .deploymentId'

命令拆解:

  • .s[]:获取s对象下的所有值(不管键名是什么,正好适配你不知道那个键名的场景)
  • .[]:遍历这个值对应的数组里的每一个对象元素
  • select(.stack == "c_c"):筛选出stack字段严格等于"c_c"的对象
  • .deploymentId:提取这些符合条件的对象中的deploymentId值

如果想要紧凑的JSON格式输出(带引号),把-r换成-c就行:

jq -c '.s[] | .[] | select(.stack == "c_c") | .deploymentId'

为什么你之前的命令不行?

你之前用了. - map(select(...)),这里的-是数组减法操作,相当于把原数组减去符合条件的元素,自然得到反结果;而去掉减号后. map(...)是错误语法,正确的数组筛选应该用map(select(...))(直接对数组操作),或者用.[]遍历后筛选,两种写法都能实现需求,比如用map的版本:

jq -r '.s[] | map(select(.stack == "c_c")) | .[] | .deploymentId'

测试结果

用你提供的JSON输入,执行上述命令后会输出:

abc

内容的提问来源于stack exchange,提问作者Vikash Raja Samuel Selvin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:52:06