Exclude column from jq json output

Leo Gallucci picture Leo Gallucci · Nov 24, 2015 · Viewed 17.5k times · Source

I would like to get rid of the timestamp field here using jq JSON processor.

[
  {
    "timestamp": 1448369447295,
    "group": "employees",
    "uid": "elgalu"
  },
  {
    "timestamp": 1448369447296,
    "group": "employees",
    "uid": "mike"
  },
  {
    "timestamp": 1448369786667,
    "group": "services",
    "uid": "pacts"
  }
]

White listing would also works for me, i.e. select uid, group

Ultimately what I would really like is a list with unique values like this:

employees,elgalu
employees,mike
services,pacts

Answer

hek2mgl picture hek2mgl · Nov 24, 2015

If you just want to delete the timestamps you can use the del() function:

jq 'del(.[].timestamp)' input.json

However to achieve the desired output, I would not use the del() function. Since you know which fields should appear in output, you can simply populate an array with group and id and then use the join() function:

jq -r '.[]|[.group,.uid]|join(",")' input.json

-r stands for raw ouput. jq will not print quotes around the values.

Output:

employees,elgalu
employees,mike
services,pacts