mirror of
https://github.com/jbranchaud/til
synced 2026-07-06 09:10:34 +00:00
59 lines
1.8 KiB
Markdown
59 lines
1.8 KiB
Markdown
# Process JSON Output From gh With jq
|
||
|
||
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`:
|
||
|
||
```bash
|
||
❯ 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:
|
||
|
||
```bash
|
||
❯ 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`](https://jqlang.org/manual/v1.5/#format-strings-and-escaping):
|
||
|
||
```bash
|
||
❯ 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](https://github.com/jbranchaud/dotfiles/commit/f964ca10c6c4db3475411c2991dc2f1dfd18c818).
|