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.
As mentioned in the previous answers the difficulty in converting json to csv is because a json file can contain nested dictionaries and therefore be a multidimensional data structure verses a csv which is a 2D data structure.
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'
Using perl wasn't a good solution for me but after a bit of trial and error I figured out you can do it with just jq
using the join()
operator.
First make an array of the output you need, then join the array elements using commas.
jq -r '[.case, .custom."speech invoked", .custom."input method"] | join(", ")'
Enjoy. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With