jq ориентирован на поток, поэтому, если вы хотите выполнить какую-то операцию с каждым объектом, тогда может быть достаточно определить эту операцию в jq и позволить jq обрабатывать поток без лишних слов.
Еслипо какой-то причине вам нужен индекс каждого элемента в потоке, тогда вы можете избежать опции -s
, если ваш jq имеет inputs
(как и jq 1.5).(Отказ от опции -s
экономит память.)
В следующем предполагается, что ваш jq имеет inputs
;эта индексация основана на 0;и что jq вызывается с опцией -n.
Генерация индекса
foreach inputs as $input (-1; .+1; [., $input])
Это создаст поток массивов [INDEX, ITEM].Затем вы можете использовать дополнительные фильтры jq, используя оператор канала jq (|
).
Выбор i-го элемента из потока JSON-сущностей.
Для иллюстрации подходящегометод для вызова jq, предположим, что поток сущностей JSON происходит из curl COMMAND
, и нам нужен второй элемент (то есть с индексом 1).
Invocation
curl COMMAND | jq --argjson i 1 -n -f program.jq
(Обратите внимание на параметр командной строки -n
!)
program.jq
def get($i):
label $done
| foreach inputs as $input (-1; .+1;
if $i == . then $input, break $done else empty end);
get($i)