如何使用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
相关产品推荐
相关产品推荐

