Given this JSON data in the file data.json
:
[
{ "id": 1, "entityType": "cat" },
{ "id": 2, "entityType": "dog" },
{ "id": 3, "entityType": "bird" },
{ "id": 4, "entityType": "cat" }
]
How would return an array sorted by some non-alphabetic arbitrary order (e.g dogs, birds and then cats)?
I've tried various permutations along the lines of:
jq --argjson order '["dog", "bird", "cat"]' '. | sort_by( index($order[], .entityType) )' data.json
but without any joy.
It's easier (and faster) to use an object for the order:
jq --argjson order '{"dog":0, "bird":1, "cat":2}' \
'. | sort_by($order[.entityType])'
But if you insist:
jq --argjson order '["dog", "bird", "cat"]' \
'. | sort_by(.entityType as $type | ($order | index($type)))'