我从一个脚本中得到了输出,该脚本将两个结构相同的JSON片段输出到一个文件中:
{
"Objects": [
{
"Key": "somevalue",
"VersionId": "someversion"
}
],
"Quiet": false
}
{
"Objects": [
{
"Key": "someothervalue",
"VersionId": "someotherversion"
}
],
"Quiet": false
}
我想通过JQ传递这个输出,得到一个Objects[]列表,连接两个列表中的所有对象,并输出相同的整体结构。我可以在两个单独的JQ命令之间使用管道来完成它:
jq '.Objects[]' inputfile | jq -s '{"Objects":., "Quiet":false}' -
但是我想知道是否有一种更优雅的方法来做到这一点,只使用一次JQ调用。
我目前使用的是JQ版本1.5,但如果需要可以更新。
您不需要在这里调用JQ两次。第二个对象可以使用input
关键字获取。
.Objects += input.Objects
<<p><一口>在线演示/一口>一口>您可以使用reduce
:
jq -s 'reduce .[] as $item ({ Quiet: false }; .Objects += $item.Objects)'
实际操作
正如@oguz-ismail在评论中建议的那样,-s
(slurp)标志可以通过使用inputs
来移除,以获得第一个条目之后的其余条目:
jq 'reduce inputs as $item (.; .Objects += $item.Objects)'
实际操作
两个版本都可以使用任意数量的输入项(第二个版本至少需要一个)。