jq a lightweight and flexible command-line JSON processor.
members.json
:
[ { "member_id": 123, "loans":[ { "date": "123", "media": [ { "title": "foo" }, { "title": "bar" } ] }, { "date": "456", "media": [ { "title": "foo" } ] } ] }, { "member_id": 456, "loans":[ { "date": "789", "media": [ { "title": "foo"} ] } ] } ]
jq '"foo" as $title | .[] | {
id: .member_id,
$title,
count: [.loans[].media[] | select(.title == $title)] | length
}' members.json
{ "id": 123, "title": "foo", "count": 2 } { "id": 456, "title": "foo", "count": 1 }
jq 'map(
(.member_id) as $m
| .loans[].media[]
| select(.title=="foo")
| {id: $m, title: .title}
)
|group_by(.id)[]
|.[0] + { count: length }
' members.json