刚开始玩jq
,我一辈子都无法接受如何以更干净的方式处理它。我有一些来自AWS SSM参数存储的数据,这些数据作为JSON接收,我想要处理。
数据的结构方式如下
[
{
"Name": "/path/to/key_value",
"Value": "foo"
},
{
"Name": "/path/to/key_value_2",
"Value": "bar"
},
...
]
我希望它以以下方式输出:key_value=foo key_value_2=bar
。我的第一个想法是按如下方式处理它:map([.Name | split("/") | last, .Value] | join("=")) | join(" ")
,但后来我得到了以下错误:jq: error (at <stdin>:9): Cannot index array with string "Value"
。就好像在管道化Name
参数的值之后,对Value
值的引用丢失了一样。
当然,我可以这样解决它,但它太难看了:map([.Value, .Name | split("/") | last] | reverse | join("=")) | join(" ")
。如何在不丢失对Value
的引用的情况下处理Name
的值?
编辑:JQ播放链接
map((.Name | split("/") | last) + "=" + .Value) | join(" ")
将输出:
"key_value=foo key_value_2=bar"
在线演示
"诀窍"是将.Name | split("/") | last)
封装到()
中,使.value
保持可用
如果您更喜欢字符串插值(()
(而不是(key) + .Value
,您可以将其重写为:
map("(.Name | split("/") | last)=(.Value)") | join(" ")