Linux下使用jq按条件筛选JSON中docker-image类型的path值
提取packages.json中指定类型依赖路径的实现方案
现有文件与需求说明
存储Docker镜像等依赖信息的packages.json文件结构示例如下:
{ "dependencies": [ { "name": "powershell-core", "type": "zip", "path": "Dependencies", "filename": "PowerShell-Core-6.2.3-win-x64.msi" }, { "name": "redis", "type": "docker-image", "path": "redis:6.0.10-alpine3.12", "filename": "" }, { "name": "keycloak", "type": "docker-image", "path": "jboss/keycloak:12.0.1", "filename": "" } ] }
注:原示例内容末尾存在多余尾逗号,不符合标准JSON规范,实际使用时建议删除避免解析报错
需求为:在Linux环境下,提取dependencies节点下所有type字段值为docker-image的条目的path值,结果保存到文件。之前通过手动指定数组下标的jq '.dependencies[2].path' packages.json命令只能获取单条固定位置的结果,无法适配批量筛选、条目顺序调整的场景。
具体实现命令
直接使用jq的条件筛选语法即可完成需求,无需编写额外脚本:
- 直接在终端输出筛选结果的命令:
jq -r '.dependencies[] | select(.type == "docker-image") | .path' packages.json - 将结果保存到指定文件(例如保存为
docker_image_list.txt),只需要追加shell重定向符即可:jq -r '.dependencies[] | select(.type == "docker-image") | .path' packages.json > docker_image_list.txt
命令参数说明
-r:raw输出模式,提取的字符串不会额外包裹JSON格式的双引号,直接输出纯文本内容.dependencies[]:遍历dependencies数组下的所有元素,不需要手动指定数组下标,后续新增、调整依赖条目顺序不需要修改命令select(.type == "docker-image"):筛选逻辑,仅保留type字段值匹配docker-image的条目,自动跳过字段不匹配、字段缺失的条目,适配半结构化、字段不统一的JSON内容.path:对筛选出的条目,提取其path字段的值
执行结果
命令执行后,输出/保存的内容为:
redis:6.0.10-alpine3.12 jboss/keycloak:12.0.1
内容的提问来源于stack exchange,提问作者Santoshkumar
相关产品推荐
相关产品推荐

