我有一个对象数组作为输入,每个对象如下所示:
{
"downloadDir": "/merge/downloads",
"id": 2485,
"labels": [
"irrelevant",
"downloads"
]
}
我试图让JQ遍历每个对象,并找到那些在.labels数组中没有元素的对象,该元素是.downloadDir在第1个和第2个'/'之间的子字符串,即。
- 对于“/merge/downloads”,它应该是“downloads”
- 对于“/merge/tv/downloads”,它应该是“tv”
- 对于“/merge/tv-share/downloads”,它应该是“tv-share”
对于匹配的对象,它应该返回它们的. id。
在回顾了Stack Overflow上的一些类似问题后,我认为逻辑应该是这样的:Map(选择(.labels|index(.downloadDir)))。如果我在index()中有一个静态字符串,如map(select(.labels|index(“downloads”))),但是我无法让它与.downloadDir一起工作:它抛出“Cannot index array with string“downloadDir””或“Cannot index string with string“labels”“,这取决于我是否将输入作为数组传递。
我完全不确定如何将正则表达式应用于.downloadDir以从中获取所需的子字符串。
2条答案
按热度按时间jogvjijk1#
使用
/
在"/"
处拆分.downloadDir
,并获取第二个项目。将其与.labels
中的每个项目进行比较,如果至少有一个(any
)匹配,则产生true
。select
这些项目,并输出.id
。Demo
如果你的输入确实是一个元素数组,那么就在前面加上
.[]
。eaf3rand2#
我在输入中添加了一个对象进行测试:
下面的表达式返回第一个对象的
id
,而不是第二个: