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

使用jq通过变量指定JSON路径更新值时运行报错如何解决?

jq 传入路径变量更新JSON值问题解决方案

报错原因

使用--arg传入的变量默认是字符串类型,jq不会将其解析为JSON路径表达式,只会当作普通字面量处理,因此直接对$p执行赋值操作会触发路径无效的报错。

可行解决方案

方案1:直接拼接shell变量(简单场景优先)

如果路径字符串是固定可控的,直接将变量拼接到jq的表达式参数中即可,写法如下:

KEY='.Resources.lc.Properties.UserData."Fn::Base64"'
jq "$KEY = \"HHH\"" my_data.json

注意如果赋值内容也用变量存储,需要处理好引号转义避免解析错误。

方案2:使用路径数组+setpath(更安全,推荐)

如果需要规避注入风险,可将路径转为JSON数组格式,用--argjson传入后调用setpath方法赋值:

# 路径写为数组格式,每一级路径为数组的一个元素
KEY='["Resources", "lc", "Properties", "UserData", "Fn::Base64"]'
jq --argjson p "$KEY" 'setpath($p; "HHH")' my_data.json

方案3:动态解析路径字符串

如果你必须保留原有点分隔的路径字符串写法,可调用jq的eval函数动态解析路径:

KEY='.Resources.lc.Properties.UserData."Fn::Base64"'
jq --arg p "$KEY" --arg val "HHH" 'eval("\($p) = \($val|@json)")' my_data.json

注意:eval存在代码注入风险,仅在路径完全可控的场景下使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:45:00