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

如何使用jq根据指定元素值返回对应数组的键名?

使用jq查找包含指定元素的数组键名

核心实现命令

针对你的JSON数据,可通过以下jq命令快速定位包含目标service的数组键名:

# 查询service-a对应的键
jq --arg target "service-a" 'keys[] | select(test("[a-zA-Z]_services$")) as $key | select(.[$key] | index($target)) | $key' input.json

执行后输出:blue_services

如果要查询其他service,只需修改--arg参数的目标值即可:

# 查询service-h对应的键
jq --arg target "service-h" 'keys[] | select(test("[a-zA-Z]_services$")) as $key | select(.[$key] | index($target)) | $key' input.json

输出:black_services

命令逻辑拆解

  • --arg target "xxx":通过变量传递目标值,无需修改jq核心表达式即可重复查询不同service
  • keys[] | select(test("[a-zA-Z]_services$")):筛选出所有以_services结尾的键(和你之前的筛选逻辑衔接)
  • as $key:将筛选后的键赋值给变量$key,方便后续引用对应数组
  • select(.[$key] | index($target)):检查当前键对应的数组是否包含目标值(index返回元素位置,存在则判定为真)
  • | $key:输出符合条件的键名

可选写法(用any函数判断)

也可以用any函数替代index,逻辑更直观:

jq --arg target "service-e" 'keys[] | select(test("[a-zA-Z]_services$")) as $key | select(.[$key] | any(. == $target)) | $key' input.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:37:37