-
Notifications
You must be signed in to change notification settings - Fork 0
Home
nntrn edited this page Sep 29, 2023
·
5 revisions
json2csv
jq -r '(.[0] | keys_unsorted) as $keys | ([$keys] + map([.[ $keys[] ]])) [] | @csv'
csv2json
jq -R -s 'def objectify(headers): . as $in | reduce range(0; headers|length) as $i ({}; .[headers[$i]] = ($in[$i] | tonumber? // .) ); def csv2table: split("\n") | map( split(",") | map(sub("^ +";"") | sub(" +$";"")) ); def csv2json: csv2table | (.[0]|map(gsub(" "; "_")|gsub("[()]";""))) as $headers | reduce ( .[1:][] | select(length > 0) ) as $row ( []; . + [ $row| objectify($headers) ]); csv2json'
Produce list of unique keys
jq -r '[paths | map(strings)] | unique[] | join(".")'
Join files on key
JOIN_KEY=...
jq --arg joinkey $JOIN_KEY 'JOIN(INDEX(inputs[];.[$joinkey]);.[];.[$joinkey];add)'
Pass argument from environment to remove recursively:
DELETE_KEY=...
jq --arg deletekey $DELETE_KEY 'walk(if type == "object" then . | del(.[$deletekey]) else . end)'
Group by count
GROUPBY_KEY=...
jq --arg groupbykey $GROUPBY_KEY '{"\($groupbykey)": group_by(.[$groupbykey]) | map({"\(.[0][$groupbykey])": length}) | add}'
Summary
jq 'def summary($item): {"\($item)":group_by(.[$item])|map({"\(.[0][$item])":length})|add}; [(.[0]|keys)[] as $keys | summary($keys)] | add'
Flatten nested object
jq 'map(. as $in | reduce leaf_paths as $path ({}; . + { ($path | map(tostring) | join(".")): $in | getpath($path) }))'
Remove spaces or periods from object key names
gsub("[^a-zA-Z0-9]"; "_")
gsub(" "; "_")
For object
jq 'to_entries|map({key:(.key|gsub(" "; "_")),value})|from_entries'
For array of objects:
jq 'map(to_entries|map({key:(.key|split(" (")[0]|gsub("[^a-zA-Z0-9]"; "_")|ascii_downcase),value})|from_entries)'
Get environment
jq -n 'env'
References:
- Produce list of unique keys: https://stackoverflow.com/a/77134233