1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 23:28:02 +00:00

Add Find All Objects With A Matching Key Value Pair as a jq TIL

This commit is contained in:
jbranchaud
2023-01-20 09:36:08 -06:00
parent 15dd720cee
commit e2cbec17bf
2 changed files with 47 additions and 1 deletions

View File

@@ -0,0 +1,45 @@
# Find All Objects With A Matching Key Value Pair
Let's say I have a JSON file representing a bunch of people's reading lists.
That means it is an array of objects where each object is a person's reading
profile and contains a _list_ of books. Some of those books have a _status_ of
`reading` meaning the person is currently reading that book.
How can we find all books that are currently being read?
```
jq '. | map(
{
name: .username,
in_progress_books: (.books | map(select(.status == "reading")))
}
)'
```
```
[
{ name: 'bobr', in_progress_books: [...] },
{ name: 'sallyf', in_progress_books: [...] },
...
]
```
That will show us for each reader what books they are currently reading.
Alternatively, we could roll that all up into a single list of books.
```
jq '. |
map(.books | map(select(.status == "reading"))) |
flatten'
```
```
[
{ title: 'Moby Dick', status: 'reading', ... }
{ title: 'The Great Gatsby', status: 'reading', ... }
...
]
```
[source](https://stackoverflow.com/a/18608100/535590)