Reusable function to group_by but return an object with group as key

Here’s a variant using reduce instead of group_by:

reduce .[] as $m ({}; .[$m.country] += [$m])

Demo

Or as a defined function:

def grp(f): reduce .[] as $m ({}; .[$m|f] += [$m]);

grp(.country)

Demo

{
  "germany": [
    {
      "name": "anna",
      "country": "germany"
    },
    {
      "name": "lisa",
      "country": "germany"
    }
  ],
  "usa": [
    {
      "name": "john",
      "country": "usa"
    }
  ]
}

Leave a Comment