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

如何使用jq根据匹配的文件路径获取对应用户列表?

问题解决:根据文件匹配路径获取对应用户

问题场景

给定路径-用户映射JSON:

[
  {
    "path": "Module1/",
    "users": [
      "john",
      "jane"
    ]
  },
  {
    "path": "Module2/",
    "users": [
      "mike",
      "mary"
    ]
  },
  {
    "path": "Module3/",
    "users": [
      "billy",
      "bonny"
    ]
  }
]

给定文件数组:

[
  "Module1/file.java",
  "Module3/file.java"
]

需求:获取所有存在匹配路径的文件对应的用户,预期输出:

[
  "john",
  "jane",
  "billy",
  "bonny"
]

原脚本问题

原脚本错误地用path去匹配文件名的正则,逻辑完全倒置——实际需要判断文件名是否以某个path为前缀,而非path是否匹配文件名。

修正后的脚本

users='[{"path":"Module1/","users":["john","jane"]},{"path":"Module2/","users":["mike","mary"]},{"path":"Module3/","users":["billy","bonny"]}]'
files='["Module1/file.java","Module3/file.java"]'

echo "$users" | jq --argjson files "$files" '[.[] | select(any($files[]; startswith(.path))) | .users[]]'

逻辑说明

  1. 使用--argjson直接传入文件数组的JSON结构,避免字符串拼接正则的复杂操作和潜在错误
  2. any($files[]; startswith(.path)):遍历所有文件,检查是否存在任意文件以当前条目的path作为前缀,满足条件则保留该路径条目
  3. 提取所有符合条件的条目下的users元素,展开为一维数组,得到预期结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:03:12