Jen*_* M. 45 arrays json addition fileslurp jq
我想转换对象流:
{
"a": "green",
"b": "white"
}
{
"a": "red",
"c": "purple"
}
Run Code Online (Sandbox Code Playgroud)
成为一个对象:
{
"a": "red",
"b": "white",
"c": "purple"
}
Run Code Online (Sandbox Code Playgroud)
另外,如何将相同的序列包装到数组中?
[
{
"a": "green",
"b": "white"
},
{
"a": "red",
"c": "purple"
}
]
Run Code Online (Sandbox Code Playgroud)
可悲的是,手册严重缺乏全面性,谷歌搜索也没有找到答案.
pea*_*eak 61
如果您的输入是一个对象流,那么除非您的jq具有inputs,否则必须"slurped"对象,例如使用-s命令行选项,以便将它们组合在一起.
因此,在输入流中组合对象的一种方法是使用:
jq -s add
Run Code Online (Sandbox Code Playgroud)
对于第二个问题,创建一个数组:
jq -s .
Run Code Online (Sandbox Code Playgroud)
当然还有其他选择,但这些都很简单,不需要最新版本的jq.使用jq 1.5及更高版本,您可以使用"输入",例如jq -n '[inputs]'
Evg*_*eny 15
使用-s命令行选项进行替代的替代方法是使用inputs过滤器。像这样:
jq -n '[inputs] | add'
Run Code Online (Sandbox Code Playgroud)
这将产生一个包含所有输入对象的对象。
ggo*_*len 10
如果您通过 jq 过滤器而不是外部输入到达这一点,mwag 的评论建议将 jq 过滤器包装在[]s 中可能会很有用。
例子:
$ echo '[{"foo":42},{"foo":43}]' | jq '.[]'
{
"foo": 42
}
{
"foo": 43
}
$ echo '[{"foo":42},{"foo":43}]' | jq '[.[]]'
[
{
"foo": 42
},
{
"foo": 43
}
]
Run Code Online (Sandbox Code Playgroud)
另请参阅jq Github 问题 #684:从对象创建数组?。
要将对象组合到数组中,您可以使用以下命令:
$ echo '
{
"a": "green",
"b": "white"
}
{
"a": "red",
"c": "purple"
}' | jq -n '[inputs]'
[
{
"a": "green",
"b": "white"
},
{
"a": "red",
"c": "purple"
}
]
Run Code Online (Sandbox Code Playgroud)