I have the packages.json file which contains the docker image details, looks like:
"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": ""
},
]
The JSON data is semi-structured and all is not the same. Here I am trying to fetch specific data like "path" with condition like if its a "type": "docker-image" under "dependencies" then fetch it.
I have tried something like:
$ jq '.dependencies[2].path' packages.json
output:
"redis:6.0.10-alpine3.12"
So how to fetch all the "path" having "type" as "docker-image" under "dependencies" from the packages.json file and keep it in a file.
>Solution :
Use select to filter an array:
jq -r '.dependencies[] | select(.type == "docker-image").path' packages.json
The -r removes the double quotes around the paths.
Use redirection to save the output to a file:
... > output