Having written a lot about jq recently, I'm continuing to have fun.
Today it's about searching for stuff, as I was seeking to parse a huge amount of output ( a list of running containers ) for a snippet of the container's name ....
Here's an example of how I solved it ...
Take an example JSON document: -
cat family.json
{
"friends": [
{
"givenName": "Dave",
"familyName": "Hay"
},
{
"givenName": "Homer",
"familyName": "Simpson"
},
{
"givenName": "Marge",
"familyName": "Simpson"
},
{
"givenName": "Lisa",
"familyName": "Simpson"
},
{
"givenName": "Bart",
"familyName": "Simpson"
}
]
}
I can then use jq to dump out the entire document: -
cat family.json | jq
{
"friends": [
{
"givenName": "Dave",
"familyName": "Hay"
},
{
"givenName": "Homer",
"familyName": "Simpson"
},
{
"givenName": "Marge",
"familyName": "Simpson"
},
{
"givenName": "Lisa",
"familyName": "Simpson"
},
{
"givenName": "Bart",
"familyName": "Simpson"
}
]
}
but, say, I want to find all the records where the familyName is Simpson ?
cat family.json | jq -c '.friends[] | select(.familyName | contains("Simpson"))'
{"givenName":"Homer","familyName":"Simpson"}
{"givenName":"Marge","familyName":"Simpson"}
{"givenName":"Lisa","familyName":"Simpson"}
{"givenName":"Bart","familyName":"Simpson"}
or all the records where the givenName contains the letter a ?
cat family.json | jq -c '.friends[] | select(.givenName | contains("a"))'
{"givenName":"Dave","familyName":"Hay"}
{"givenName":"Marge","familyName":"Simpson"}
{"givenName":"Lisa","familyName":"Simpson"}
{"givenName":"Bart","familyName":"Simpson"}
or, as an edge-case, where the givenName contains the letter A or the letter a i.e. ignore the case ?
cat family.json | jq -c '.friends[] | select(.givenName | match("A";"i"))'
{"givenName":"Dave","familyName":"Hay"}
{"givenName":"Marge","familyName":"Simpson"}
{"givenName":"Lisa","familyName":"Simpson"}
{"givenName":"Bart","familyName":"Simpson"}
TL;DR; jq rules!
No comments:
Post a Comment