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

如何使用jq从多映射JSON中根据软件版本查询对应补丁集名称?

使用jq根据软件版本查找对应补丁集名称

我有一个记录补丁集与软件版本兼容性的JSON结构如下:

{
   "compatibility":{
      "v7.11.x":[
         "7.12.1",
         "7.12.0",
         "7.11.2",
         "7.11.1",
         "7.11.0"
      ],
      "v7.13.x":[
         "7.14.2",
         "7.14.1",
         "7.14.0",
         "7.13.1",
         "7.13.0"
      ],
      "v7.15.x":[
         "8.1.0",
         "8.0.1",
         "8.0.0",
         "7.17.1",
         "7.17.0",
         "7.16.1",
         "7.16.0",
         "7.15.1",
         "7.15.0"
      ]
   }
}

需求是:给定具体软件版本(比如8.1.0),用jq工具返回对应的补丁集名称(比如v7.15.x)。


完全可以用jq实现这个需求,具体方案如下:

针对文件中的JSON查询

假设JSON数据保存在compatibility.json文件中,查询指定版本的命令:

jq --arg version "8.1.0" '.compatibility | to_entries[] | select(.value[] == $version) | .key' compatibility.json

针对标准输入的JSON查询

如果JSON内容通过管道传入,命令如下:

echo '{
   "compatibility":{
      "v7.11.x":[
         "7.12.1",
         "7.12.0",
         "7.11.2",
         "7.11.1",
         "7.11.0"
      ],
      "v7.13.x":[
         "7.14.2",
         "7.14.1",
         "7.14.0",
         "7.13.1",
         "7.13.0"
      ],
      "v7.15.x":[
         "8.1.0",
         "8.0.1",
         "8.0.0",
         "7.17.1",
         "7.17.0",
         "7.16.1",
         "7.16.0",
         "7.15.1",
         "7.15.0"
      ]
   }
}' | jq --arg version "8.1.0" '.compatibility | to_entries[] | select(.value[] == $version) | .key'

命令说明

  • --arg version "8.1.0":将目标版本作为变量$version传入jq,方便替换查询的版本
  • .compatibility:定位到JSON中的兼容性映射对象
  • to_entries[]:把对象的键值对转换为数组元素(每个元素格式为{"key": "补丁集名称", "value": ["版本列表"]})
  • select(.value[] == $version):筛选出值数组中包含目标版本的键值对
  • .key:提取并返回对应的补丁集名称

如果某个版本同时属于多个补丁集,该命令会返回所有匹配的补丁集名称。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:09:29