How can I convert my JSON to CSV using jq?

user2711819 picture user2711819 · Aug 28, 2014 · Viewed 15.4k times · Source

I have the following JSON data:

{"id":"111","case":"Y","custom":{"speech invoked":"no","input method":"hard","session ID":"420"}}

How can I convert it to CSV format using jq so my result looks like this?

id,case,session Id,speech invoked,input method

111,Y,420,no,hard

I tried the following, but it didn't work:

{(.id),(.case),(.custom."session Id"),(.custom."speech invoked"),(.custom."input method")}

If not possible any perl or shell solution is appreciated.

Answer

Olivier Aubert picture Olivier Aubert · Jul 2, 2015

Building upon Joe Harris' answer, you can use the @csv filter so that strings are properly quoted and escaped when necessary :

jq -r '[.case, .custom."speech invoked", .custom."input method"] | @csv'