Вы не используете истинные функции jq
. То, что вы показали в al oop, итерируя по всем объектам JSON, можно просто уменьшить до одной конструкции reduce()
, которая является своего рода for
l oop в jq
при заданном начальном значении и запускает пошаговый фильтр
jq 'reduce range(0, length) as $d (.; (.[$d].ver = ($d+1|tostring)) | (.[$d].date = "2020-01-\($d+1)")) '
Краткое объяснение того, как это работает
- Выражение диапазона возвращает список с числами, сгенерированными от 0 до длины объектов в массиве. Для заданного вами ввода он выдает
0,1
, который присваивается d
- Выражение
reduce
с учетом входного значения .
всего JSON, выполняется путем установки значений в каждом объекте, проиндексированном с помощью $d
. Таким образом, .[$d].ver
относится к полю ver
в нулевом индексе. Это делается постепенно до тех пор, пока все объекты не будут обработаны. - Таким же образом поле даты изменяется, используя
[$d].date
с префиксом строки значения (ГГГГ-ММ-) и датой, соответственно устанавливаемой.