I\'m taking a modified command from the jq
tutorial:
curl \'https://api.github.com/repos/stedolan/jq/commits?per_page=5\' \\
| jq -r -c \'.[] | {mes
Just add the header text in an array in front of the values.
["Commit Message","Committer Name"], (.[].commit | [.message,.committer.name]) | @csv
While I fully realize OP was looking for a purely jq answer, I found this question looking for any answer. So, let me offer one I found (and found useful) to others like me.
sudo apt install moreutils
- if you don't have them yet. Moreutils website.echo "Any, column, name, that, is, not, in, your, json, object" | cat - your.csv | sponge your.csv
Disadvantages: requires moreutils
package, is not just jq
-reliant, so some would understandably say less elegant.
Advantages: you choose your headers, not your JSON keys. Also, pure jq
ways are bothered by the sorting of the keys, depending on your version.
tee
without having to install any packages!No, you could not, as Kos excellently demonstrates here. Not unless you're fine with loosing your csv at some point.
Based on Anton's comments on Jeff Mercado's answer, this snippet will get the key names of the properties of the first element and output them as an array before the rows, thus using them as headers. If different rows have different properties, then it won't work well; then again, neither would the resulting CSV.
map({message: .commit.message, name: .commit.committer.name}) | (.[0] | to_entries | map(.key)), (.[] | [.[]]) | @csv