我想转换对象流:
{
"a": "green",
"b": "white"
}
{
"a": "red",
"c": "purple"
}
合二为一:
{
"a": "red",
"b": "white",
"c": "purple"
}
另外,如何将相同的序列包装到一个数组中?
[
{
"a": "green",
"b": "white"
},
{
"a": "red",
"c": "purple"
}
]
遗憾的是,该手册严重缺乏全面性,谷歌搜索也找不到答案。
最佳答案
如果你的输入是一个对象流,那么除非你的 jq 有 inputs
,否则这些对象必须是“slurped”,例如使用 -s 命令行选项,以组合它们。
因此,在输入流中组合对象的一种方法是使用:
jq -s add
对于第二个问题,创建一个数组:
jq -s .
当然还有其他选择,但这些都很简单,不需要最新版本的 jq。对于 jq 1.5 及更高版本,您可以使用“输入”,例如jq -n '[输入]'
高效解决方案
对于第一个问题(reduction),而不是 slurping(无论是通过 -s 选项,还是使用 [inputs]
),使用 reduce
会更有效> 带有 inputs
和 -n 命令行选项。例如,将对象流组合成一个对象:
jq -n 'reduce inputs as $in (null; . + $in)'
等效地,没有 --null-input
:
jq 'reduce inputs as $in (.; . + $in)
关于arrays - 如何将jq中的对象序列组合成一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477547/