在对象的JSON数组上进行映射,并使用JQ处理值



刚开始玩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(" ")

在线演示

相关内容

  • 没有找到相关文章