基于同一JSON文件中的另一个数组更新一个数组中的值

基于同一JSON文件中的另一个数组更新一个数组中的值,json,jq,Json,Jq,我有一个JSON文件,如下所示: { "download": [0, 0, 0, 0], "files": [ "file1.txt", "file1.iso", "file2.txt", "file2.iso" ] } 对于文件[]中以.txt结尾的每个元素,我想将下载[]中的相应元素设置为1。在JQ我该怎么做?我在谷歌上搜索了一下,但并不真正理解JQ语法

我有一个JSON文件,如下所示:

{
    "download": [0, 0, 0, 0],
    "files": [ "file1.txt", "file1.iso", "file2.txt", "file2.iso" ] 
}

对于
文件[]
中以
.txt结尾的每个元素,我想将
下载[]
中的相应元素设置为
1
。在JQ我该怎么做?我在谷歌上搜索了一下,但并不真正理解JQ语法。

在这种情况下,从头开始构建
下载
会容易得多

.download = (.files | map(if endswith(".txt") then 1 else 0 end))

但标题询问如何基于另一个数组更新一个数组,下面是一种方法:

.download = reduce (.files | path(.[] | select(endswith(".txt")))) as $p (.download; setpath($p; 1))

在这种情况下,从头开始构建
下载将容易得多

.download = (.files | map(if endswith(".txt") then 1 else 0 end))

但标题询问如何基于另一个数组更新一个数组,下面是一种方法:

.download = reduce (.files | path(.[] | select(endswith(".txt")))) as $p (.download; setpath($p; 1))

谢谢,事实上,我通过反复试验找到了第一个解决方案,但第二个非常有用!谢谢,事实上,我通过一些尝试和错误找到了第一个解决方案,但第二个非常有用!