使用
jq
我想更新 json 对象中的值。
要更新的值的键作为参数传递。
输入
{
"a": 1,
"b": 2,
"c": 3
}
带有参数的预期输出:key=b
{
"a": 1,
"b": 42,
"c": 3
}
我尝试这样做:
jq --arg key b '.($key) |= . + 40'
jq --arg key b '".\($key)" |= . + 40'
两次尝试都会导致错误:
syntax error, unexpected '('
Invalid path expression with result ".b"
如何解决这个问题?
密钥前面需要有
.
,那么由于它在变量中,所以使用 []
。
jq --arg key b '.[$key] |= (. * 999)' input
给予:
{
"a": 1,
"b": 1998,
"c": 3
}
您还可以将
|= . *
替换为 *=
运算符:
jq --arg key b '.[$key] *= 999' input
您的第一次尝试没有成功,因为您需要
[]
而不是 ()
第二个失败了,因为将其包装在字符串文字中将创建一个字符串
.b
,这不是您可以使用 |=
更新的内容。
使用方括号
[]
代替圆括号 ()
这对我有用:
jq --arg key b '.[$key] |= . + 40' input_file