如何使用jq通过传入的键参数更新JSON对象中的值?
问题:使用jq通过参数指定键更新JSON值
输入的JSON对象为:
{ "a": 1, "b": 2, "c": 3 }
需要通过--arg传入参数指定键,将对应的值更新为原数值加40(比如传入key=b时,b的值变为42)。
尝试了以下命令均报错:
jq --arg key b '.($key) |= . + 40' jq --arg key b '" .\($key)" |= . + 40'
错误信息分别是:
syntax error, unexpected '('Invalid path expression with result ".b"
解决方法
在jq中,通过变量引用对象键时,必须使用.[$变量名]的语法,正确的命令如下:
jq --arg key b '.[$key] |= . + 40'
验证效果
将输入JSON通过管道传入该命令:
echo '{ "a": 1, "b": 2, "c": 3 }' | jq --arg key b '.[$key] |= . + 40'
输出结果符合预期:
{ "a": 1, "b": 42, "c": 3 }
错误原因说明
- 第一种写法
.($key)不符合jq的路径表达式语法,jq无法解析这种变量引用方式,直接触发语法错误。 - 第二种写法试图通过字符串拼接生成路径,但jq会将其视为字符串字面量,而非合法的路径表达式,因此报错。
内容的提问来源于stack exchange,提问作者jpseng
相关产品推荐
相关产品推荐

