如何以键作为参数更新 json 对象中的值(使用 `jq`)

问题描述 投票:0回答:2

使用

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"

如何解决这个问题?

json jq
2个回答
0
投票

密钥前面需要有

.
,那么由于它在变量中,所以使用
[]

jq --arg key b '.[$key] |= (. * 999)' input

给予:

{
  "a": 1,
  "b": 1998,
  "c": 3
}

您还可以将

|= . * 
替换为
*=
运算符:

jq --arg key b '.[$key] *= 999' input

您的第一次尝试没有成功,因为您需要

[]
而不是
()

第二个失败了,因为将其包装在字符串文字中将创建一个字符串

.b
,这不是您可以使用
|=
更新的内容。


-1
投票

使用方括号

[]
代替圆括号
()

这对我有用:

jq --arg key b '.[$key] |= . + 40' input_file
© www.soinside.com 2019 - 2024. All rights reserved.