← Back to all TILs

Process JSON Output From gh With jq

github Written June 24, 2026

The gh (GitHub) CLI is useful for accessing data about your profile and projects from the terminal. With the --json flag, we can access the data in a structured way which is useful for scripting.

Here is an example of pulling a list of all my repositories, limiting each entity to just the nameWithOwner and description:

❯ gh repo list --limit 1000 --json nameWithOwner,description
[
  {
    "description": "My personal site -- joshbranchaud.com",
    "nameWithOwner": "jbranchaud/personal-site"
  },
  {
    "description": "Private repo for the NOTES.md of my TIL repo",
    "nameWithOwner": "jbranchaud/til-notes-private"
  },
  ...
]

If I'm using the --json flag, then I can add in the --jq flag to apply a jq query for additional processing of the output.

Here I convert it to a series of tuples:

❯ gh repo list --limit 1000 --json nameWithOwner,description \
  --jq '.[] | [.nameWithOwner, .description]'
[
  "jbranchaud/personal-site",
  "My personal site -- joshbranchaud.com"
]
[
  "jbranchaud/til-notes-private",
  "Private repo for the NOTES.md of my TIL repo"
]
...

Then I can add one more pipe to that jq query to turn it into tab-separated values using @tsv:

❯ gh repo list --limit 1000 --json nameWithOwner,description \
  --jq '.[] | [.nameWithOwner, .description] | @tsv'
jbranchaud/personal-site    My personal site -- joshbranchaud.com
jbranchaud/til-notes-private    Private repo for the NOTES.md of my TIL repo
...

This is useful because I can then pipe it to another program, such as an fzf command like this repo selector that opens the selected one in the browser.

Other posts like this