jq
Period in Key
{ "apiVersion": "v1", "data": { "tls.crt": "Zm9vCg==", "tls.key": "YmFyCg==" }, "kind": "Secret", "type": "kubernetes.io/tls" }
echo $KubeSecret | jq -r '.data["tls.crt"]'
Multiline
echo $GithubRelease \ | jq '.assets[] | select(.name == "py-demo-Darwin-x86_64") | .name'
Variable as Argument
echo $GithubRelease \ | jq --arg name "py-demo-Darwin" \ '.assets[] | select(.name | startswith($name)) | .name'
Select
Name Contains
[ {"name": "This is item1"}, {"name": "This is item2"}, {"name": "item3"} ]
echo $Items \ | jq -c '.[] | select(.name | contains("item2"))'
Name Starts With
echo $Items \ | jq -c '.[] | select(.name | startswith("This is"))'
AWS Resources with Tag
Use aws --filter
Some AWS commands provide a --filter
option that allows filtering by tag.
aws ec2 describe-addresses \ --filters "Name=tag:Name,Values=cfclrk"
Sorting
aws s3api list-objects-v2 \ --bucket $BUCKET \ --prefix "foo/bar" \ | jq '.Contents | sort_by(.LastModified)'
If you see an error like Cannot index string with string
, it's probably
because you are not piping a proper list to it. For example:
cat $data | jq '.Stuff[] | sort_by(.Time)' # Does not work cat $data | jq '.Stuff | sort_by(.Time)' # Works!
Stringify JSON
{"message": "foo"}
echo $message | jq '@json'