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

使用jq读取存储在变量中含句点的JSON键失败如何解决

问题原因与解决方法

原因分析

两个错误分别由Shell引号解析逻辑和jq语法规则导致:

  • 第一种写法val=$(echo $json_data | jq .'$key'):Shell中单引号包裹的内容不会做变量解析,传递给jq的表达式是字面量.$key,既不符合jq语法规则,也无法读取Shell中定义的key变量值,因此直接抛出编译错误。
  • 第二种写法val=$(echo $json_data | jq ."$key"):Shell会先把双引号内的$key解析为spark.master,最终传递给jq的表达式是.spark.master。jq会把该表达式识别为先取顶层键spark,再取spark下的子键master,但原始JSON中不存在顶层键spark,因此返回null。

解决方法

最安全的方案是使用jq的--arg参数将Shell变量传入jq内部,再用通用的方括号索引语法取值,该方案不受键名特殊字符、注入风险影响:

key="spark.master"
# --arg参数将Shell变量$key的值赋值给jq内部的变量k
val=$(echo "$json_data" | jq --arg k "$key" '.[$k]')
echo $val

运行后输出结果为"local",符合预期。

如果需要直接拼接Shell变量生成jq表达式,可以用如下写法(注意:键名包含双引号等特殊字符时可能出错,不推荐):

val=$(echo "$json_data" | jq ".[\"$key\"]")

内容的提问来源于stack exchange,提问作者Sunil Kumar B M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:45:03