You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jq中对对象数组执行反向子串匹配并获取对应id?

实现反向匹配:查找path为给定模式前缀的对象ID

你的需求是找出JSON数组中,path字段是传入模式的前缀的对象ID(比如传入/home/user/data时,匹配path: "/home/user"的对象),可以用以下两种方式实现:

方式一:使用startswith函数(推荐)

startswith是jq内置的字符串函数,直接用于判断字符串是否以指定前缀开头,无需处理正则转义,适合路径匹配场景。

完整命令示例

假设JSON数据保存在data.json文件中,传入匹配模式/home/user/data:

jq --arg pattern "/home/user/data" '.[] | select($pattern | startswith(.path)) | .id' data.json

命令解析

  • --arg pattern "/home/user/data":将目标模式作为参数传入jq,命名为$pattern
  • .[]:遍历数组中的每个对象
  • select($pattern | startswith(.path)):筛选出满足「传入模式以当前对象的path开头」的对象
  • .id:输出匹配对象的id字段

执行后会输出1,符合预期结果。

方式二:使用正则表达式匹配

如果偏好正则方式,可以构造以path为前缀的正则表达式,实现相同效果:

jq --arg pattern "/home/user/data" '.[] | select($pattern | test("^" + .path)) | .id' data.json

注意事项

正则方式需要注意path中如果包含正则特殊字符(比如.、+等),需要额外转义,因此更推荐使用startswith函数。

内容的提问来源于stack exchange,提问作者xeruf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:05:22