cat json | jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ]])[] | @csv'
Create a file named filter.jq
def tocsv:
(map(keys)
|add
|unique
|sort
) as $cols
|map(. as $row
|$cols
|map($row[.]|tostring)
) as $rows
|$cols,$rows[]
| @csv;
tocsv
Run as jq -r -f
For example, for multiple files in a directory, to convert and generate a single csv
for i in `ls *json | sort -n`; do echo $i >> data.csv; jq .data $i | jq -r -f filter.jq >> data.csv; done