使用JQ从一个文件合并两个JSON片段



我从一个脚本中得到了输出,该脚本将两个结构相同的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)'

实际操作

两个版本都可以使用任意数量的输入项(第二个版本至少需要一个)。

相关内容

  • 没有找到相关文章

最新更新