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

使用jq筛选package.json依赖时如何为所有键添加指定前缀

问题

我正在解析package.json文件,提取所有以@example开头的依赖项。
使用的package.json文件内容如下:

{
  "name": "Example",
  "dependencies": { 
    "@example/alpha" : "1.2.3",
    "@example/bravo" : "1.2.3",
    "@example/charlie" : "1.2.3"
  }
}

目前使用如下jq命令可以正常完成筛选操作:

jq -r '.dependencies | select(. != null) | with_entries(select(.key | contains("@example")))' package.json

执行上述命令得到的输出为:

{ 
  "@example/alpha" : "1.2.3",
  "@example/bravo" : "1.2.3",
  "@example/charlie" : "1.2.3"
}

现在需要对结果的键做转换,为每个键添加**/前缀,最终期望得到如下输出:

{ 
  "**/@example/alpha" : "1.2.3",
  "**/@example/bravo" : "1.2.3",
  "**/@example/charlie" : "1.2.3"
}

求问如何修改命令,为输出对象的每个键添加该前缀?

解答

直接在with_entries的筛选逻辑后追加键名修改规则即可,修改后的完整命令如下:

jq -r '.dependencies | select(. != null) | with_entries(select(.key | contains("@example")) | .key = "**/" + .key)' package.json

实现原理

  • with_entries会先将输入对象转换为{key: 原键名, value: 原值}格式的条目数组,待数组处理完成后再转换回对象结构
  • 筛选出符合规则的条目后,直接对当前条目的.key属性做字符串拼接,加上**/前缀,最终生成对象时就会使用修改后的新键名
  • 补充优化:如果需要严格匹配以@example开头的键(避免键名中间包含@example字符串的误匹配场景),可以将命令中的contains("@example")替换为startswith("@example"),匹配逻辑更严谨。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:54:20