Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exclude column from jq json output

Tags:

json

jq

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 
like image 803
Leo Gallucci Avatar asked Nov 24 '15 13:11

Leo Gallucci


2 Answers

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 
like image 74
hek2mgl Avatar answered Sep 22 '22 16:09

hek2mgl


For the record, an alternative would be:

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

(The white-listing approach makes it easy to rearrange the order, and this variant makes it easy to modify the spacing, etc.)

The following example may be of interest to anyone who wants safe CSV (i.e. even if the values have embedded commas or newline characters):

$ jq -r '.[] | [.uid, .group] | @csv' input.json "elgalu","employees" "mike","employees" "pacts","services" 
like image 42
peak Avatar answered Sep 24 '22 16:09

peak