开发者

Adding values to dynamic keys with jq

I try to construct a json object with jq. I start with an empty object and want to add keys and values dynamically.

This works but the key is not variable. It's fixed to "foo":

echo '{"foo": ["开发者_开发技巧baz"]}' | jq --arg value "bar" '.foo += [$value]'

output as expected:

{"foo": ["baz", "bar"]}

What I actually want do do is something like this:

echo '{"foo": ["baz"]}' | jq --arg key "foo" --arg value "bar" '.($key) += [$value]'

Unfortunately this does not work. Here is the output:

jq: error: syntax error, unexpected '(' (Unix shell quoting issues?) at <top-level>, line 1:

.($key) += [$value]

jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1:

.($key) += [$value]

jq: 2 compile errors

I couldn't find a solution or figure it out.

I know that this works: jq --null-input --arg key foo '{($key): "bar"}' but it doesn't solve my problem since I want to append values to existing lists as you can see in the examples.


You need to use square parens [..] instead of (..) as reported in the error message. Just do

jq --arg key "foo" --arg value "bar" '.[$key] += [$value]'

This error line is quite verbose to recommend you the right syntax to use. The emphasis with # is mine

jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1
#              ^^^^^^^^^^^^^  
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜