如何使用jq将多行JSON消息转换为分组数组?
将单行JSON对象按每两个分组为JSON数组的jq命令
需求场景
消息生成器./messages.sh的输出是每行一个独立的JSON对象,格式如下:
$ ./messages.sh {"a":"v1"} {"b":"v2"} {"c":"v3"} {"d":"v4"} ...
需要用jq将这些单行JSON对象按每两个一组,打包成JSON数组输出,最终效果如下:
$ ./messages.sh | jq [命令] [{"a":"v1"},{"b":"v2"}] [{"c":"v3"},{"d":"v4"}] ...
实现命令
直接使用以下jq命令即可完成分组:
jq -n 'repeat([input, input])'
命令解释
-n参数:让jq不自动读取全部输入,而是通过input函数逐个读取,适配流式输出的场景(比如消息生成器持续输出的情况)repeat([input, input]):循环执行括号内的逻辑,每次读取两个输入的JSON对象,将它们组合成数组后输出
如果需要处理输入对象数量为奇数的情况(最后剩下单个对象),可以使用下面的命令,确保最后单个对象也会被包装成数组输出:
jq -n 'def get_pair: (input // empty) as $first | [$first, (input // $first)]; repeat(get_pair)'
内容的提问来源于stack exchange,提问作者kolisko
相关产品推荐
相关产品推荐

