jq cheatsheet

Sort & aggregate

Order, group, deduplicate, and summarize values. Explore 5 examples, then try one against the included input or your own data.

jq examples

5 examplesOrder, group, deduplicate, and summarize values.
Sort & aggregate

Sort objects by a field

sort_by evaluates a key expression for every array item.

sort_by(.score) | reverse
Input and expected output
Input
[{"name":"Ada","score":92},{"name":"Grace","score":98},{"name":"Linus","score":85}]
Expected output
[
  {
    "name": "Grace",
    "score": 98
  },
  {
    "name": "Ada",
    "score": 92
  },
  {
    "name": "Linus",
    "score": 85
  }
]
Sort & aggregate

Group items by a field

group_by sorts values by the key and collects equal keys together.

group_by(.team) | map({team: .[0].team, members: map(.name)})
Input and expected output
Input
[{"name":"Ada","team":"compiler"},{"name":"Grace","team":"compiler"},{"name":"Linus","team":"kernel"}]
Expected output
[
  {
    "team": "compiler",
    "members": [
      "Ada",
      "Grace"
    ]
  },
  {
    "team": "kernel",
    "members": [
      "Linus"
    ]
  }
]
Sort & aggregate

Deduplicate by a field

unique_by keeps one value for each distinct key and sorts by that key.

unique_by(.id)
Input and expected output
Input
[{"id":2,"name":"Grace"},{"id":1,"name":"Ada"},{"id":2,"name":"Duplicate"}]
Expected output
[
  {
    "id": 1,
    "name": "Ada"
  },
  {
    "id": 2,
    "name": "Grace"
  }
]
Sort & aggregate

Sum an array of numbers

add reduces an array using jq addition.

.orders | map(.total) | add
Input and expected output
Input
{"orders":[{"total":12.5},{"total":7.5},{"total":20}]}
Expected output
40
Sort & aggregate

Find the maximum by a field

max_by returns the item whose key expression is greatest.

max_by(.score)
Input and expected output
Input
[{"name":"Ada","score":92},{"name":"Grace","score":98}]
Expected output
{
  "name": "Grace",
  "score": 98
}