jq: Sorting JSON objects

Last updated:
Table of Contents

WIP Alert This is a work in progress. Current information is correct but more content may be added in the future.

Sort objects by attribute value

Use jq 'sort_by(.my_attribute):

Example: sort objects by attribute attr_2

  • Input:

    [
      {
        "attr_1": "foo",
        "attr_2": 1
      },
      {
        "attr_1": "baz",
        "attr_2": 3
      },
      {
        "attr_1": "bar",
        "attr_2": 2
      }
    ]
    
  • Command

    $ cat objects.json | jq 'sort_by(.attr_2)'

  • Output

    [
      {
        "attr_1": "foo",
        "attr_2": 1
      },
      {
        "attr_1": "bar",
        "attr_2": 2
      },
      {
        "attr_1": "baz",
        "attr_2": 3
      }
    ]
    

Sort objects by attribute value, reverse

To sort objects in descending order instead use: jq 'sort_by(.my_attribute) | reverse'

Example: sort objects by attribute attr_2, in descending order

  • Input:

    [
      {
        "attr_1": "foo",
        "attr_2": 1
      },
      {
        "attr_1": "baz",
        "attr_2": 3
      },
      {
        "attr_1": "bar",
        "attr_2": 2
      }
    ]
    
  • Command

    $ cat objects.json | jq 'sort_by(.attr_2) | reverse'

  • Output

    [
      {
        "attr_1": "baz",
        "attr_2": 3
      },
      {
        "attr_1": "bar",
        "attr_2": 2
      },
      {
        "attr_1": "foo",
        "attr_2": 1
      }
    ]
    

Dialogue & Discussion