jq-成对转换数组

时间:2019-03-28 16:33:09

标签: arrays json select jq

我有一个像这样的json数组:

["abc", 0, "cd", 1]

我正在努力将其转换为csv:

"abc", 0
"cd", 1

似乎我找不到解决方案,但是我已经尝试过了:

jq '[ "abc","def", "cd", "nc"] | 
      to_entries | 
      (.[] | select(.key % 2 == 0))as $a, ( .[] | select(.key % 2 != 0) as $b ) | 
     [$a, $b] '

但这又回到我了

jq: 1 compile error

我无法理解如何将两个元素用于迭代。 对此的任何帮助将不胜感激

2 个答案:

答案 0 :(得分:4)

使用range生成偶数索引并将它们用于切片数组:

range(0;length;2) as $i | .[$i:$i+2] | @csv

请注意,-r选项是生成正确CSV所必需的。

.[$i:$i+2]生成长度为2的子数组,其中包含从索引$i(包括)到索引$i+2(不包括)的元素。

答案 1 :(得分:0)

或者,有一个标准的unix实用程序(paste),可以方便地连接输出行-您只需要每行转储JSON数组值(我将使用 {{3} } ,但同样,任何JSON工具都可以满足这样的琐碎任务):

bash $ echo '["abc", 0, "cd", 1]' | jtc -w[:] | paste -d',' - -
"abc",0
"cd",1
bash $