jq — преобразовать массив в пару

#arrays #json #select #jq

#массивы #json #выберите #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
  

Я не могу понять, как использовать два элемента для итерации.
Любая помощь в этом была бы очень признательна

Ответ №1:

Сгенерируйте четные индексы с помощью range и используйте их для нарезки массива:

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

Обратите внимание, что -r для создания правильного CSV требуется эта опция.

.[$i:$i 2] генерирует подмассив длиной 2, содержащий элементы от index $i (включительно) до index $i 2 (исключительный).