jq 将参数作为新字段的键传递

jad*_*ado 1 bash json key jq

我正在尝试使用 jq 在 json 文件中添加新字段:

jq -r --arg k "foo" --arg v "bar"  '.newField += {$k:$v}' myfile
Run Code Online (Sandbox Code Playgroud)

但它的结果是:

jq: error: syntax error, unexpected ':', expecting '}' (Unix shell quoting issues?) at <top-level>, line 1:
.newField += {$k:$v}                
jq: error: May need parentheses around object key expression at <top-level>, line 1:
.newField += {$k:$v}              
jq: 2 compile errors

Run Code Online (Sandbox Code Playgroud)

当我删除像下面这样的关键变量时,它工作正常:

jq -r --arg k "foo" --arg v "bar"  '.newField += {"static_key":$v}' myfile
Run Code Online (Sandbox Code Playgroud)

知道如何使用 jq arg 中的键名吗?

Dav*_*d Z 5

正如错误消息所示,将密钥放在括号中:

jq -r --arg k "foo" --arg v "bar"  '.newField += {($k):$v}' myfile
Run Code Online (Sandbox Code Playgroud)

jq 要求表达式(即不是文字字符串)给出的键加括号(在手册中注明)。