#json #jq
Вопрос:
У меня есть файл JSON, подобный этому:
{
"download": [0, 0, 0, 0],
"files": [ "file1.txt", "file1.iso", "file2.txt", "file2.iso" ]
}
Для каждого элемента, files[]
заканчивающегося на .txt
, я хочу установить соответствующий элемент в download[]
на 1
. Как мне это сделать в JQ? Я погуглил, но на самом деле не понимаю синтаксис JQ.
Ответ №1:
В этом случае строительство download
с нуля было бы намного проще.
.download = (.files | map(if endswith(".txt") then 1 else 0 end))
Но в заголовке спрашивается, как обновить один массив на основе другого?, и вот один из способов сделать это:
.download = reduce (.files | path(.[] | select(endswith(".txt")))) as $p (.download; setpath($p; 1))
Комментарии:
1. Спасибо, на самом деле я нашел первое решение методом проб и ошибок, но второе очень полезно!