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

如何通过Bash变量结合jq提取指定前缀的JSON字段值

使用Bash变量动态指定jq提取的JSON字段

问题场景

我有如下JSON数据:

$ echo '[{"my_var1":"valueA", "my_var2": "valueB"}]'
[{"my_var1":"valueA", "my_var2": "valueB"}]

直接提取my_var2的值很简单:

$ echo '[{"my_var1":"valueA", "my_var2": "valueB"}]' | \
jq -r '.[] .my_var2'

# 正确结果:
valueB

但需求是必须用Bash变量指定要提取的字段后缀(变量值为var2),不能直接写my_var2。我尝试的写法无法得到预期结果:

$ PART="var2"
$ echo '[{"my_var1":"valueA", "my_var2": "valueB"}]' | \
jq -r --arg JSONPART ${PART} '.[] .my_[$JSONPART]'

正确实现方式

核心是要在jq中将前缀my_和传入的变量拼接成完整的键名,再通过方括号语法访问。有两种可行写法:

写法一:字符串拼接

PART="var2"
echo '[{"my_var1":"valueA", "my_var2": "valueB"}]' | \
jq -r --arg JSONPART "$PART" '.[] | .["my_" + $JSONPART]'

写法二:字符串插值

PART="var2"
echo '[{"my_var1":"valueA", "my_var2": "valueB"}]' | \
jq -r --arg JSONPART "$PART" '.[] | .["my_\($JSONPART)"]'

两种写法都会输出预期结果:

valueB

错误原因说明

原写法.my_[$JSONPART]的问题在于,jq会将.my_解析为一个名为my_的字段,而非前缀,自然无法匹配到my_var2。必须通过字符串拼接生成完整的键名字符串,再用方括号的动态字段访问语法才能正确提取值。

内容的提问来源于stack exchange,提问作者pa-well

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:32:38