git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[RFE] Add JSON output to git log commands

From
Ron Ziroby Romero <ziroby@gmail.com>
Date
Aug 17, 2025, 20:17 UTC
Message-ID
<CAGW8g7mV6az3ybYf3uzHYQTGLDwc34eebZnha1EQ3Sb6B8E-fQ@mail.gmail.com>
I would like to add JSON output to the git log command.
## Motivation

Machine parsing of git log output is prevalent, but git only provides human-readable output. Having git output JSON directly solves problems with the format option or third-party tools. Git has the information in a machine-readable format. It should output in a machine-readable format. JSON is ubiquitous and easy to generate, and therefore, it makes sense to output JSON.

The author of one of the third-party tools says that JSON output is the natural evolution of the Unix philosophy and should be done natively for all tools[4].

## Current behaviour

Git log can output human-readable output in several ways. However, outputting in JSON requires third-party tools or hacking pretty output.

## Proposed enhancement
Add a –pretty=json flag to output logs in JSON format.
## Alternatives
### Why natively?

The `jc` command parses git log output to convert to JSON[3]. However, it post processes and has some difficulty with time zones in dates. Also, the author considers it to be a stopgap until Unix tools can be adopted to output JSON natively[4], which is what I'm proposing.

In a TIL post[2], Simon Willison showcases a method using pretty output with nulls piped to jq. This method uses the pretty command to get delimited output. However, this script doesn't handle all the output from git log.

Tools like git-log2json[1] parse git output post-hoc, rather than producing structured output from git.

Providing git log in JSON format will allow us to go to the source, where we have the log output in machine readable form, and output directly in machine readable form directly, without going through an intermediate format

### Why JSON?

JSON is a sufficient and popular output format. It is sufficient in that it can represent all the fields of git log in a way that allows for special characters like quotes, newlines, and control characters. It is also popular. Every language has libraries to parse JSON, including the command-line utility jq, which can read and mutate JSON.

## Use cases

The JSON can be used by tools or piped into jq to extract and manipulate the data. Scripts can be written to work with the JSON output.

## Design outline
* Add a `PRETTY_JSON` constant.
* Create a pretty-json.c file to output JSON log information
* Modify pretty.c to call pretty-json to output JSON when the flag is set.
* Use existing utility functions written in the existing source to
output the JSON.
## Example output
Here’s a sample with two commits:
```JSON
{
  "commits": [
    {
      "commit": "3857aae53f3633b7de63ad640737c657387ae0c6",
      "refs": [
        "HEAD",
        "refs/remotes/origin/main",
        "refs/remotes/origin/HEAD"
      ],
      "author": {
        "name": "Somebody J. Example",
        "email": "somebody@example.com",
        "date": "2024-09-25T18:23:49-07:00",
        "timestamp": "1727313829"
      },
      "committer": {
        "name": "Somebody Else",
        "email": "somebody.else@example.org",
        "date": "2024-09-25T18:24:52-07:00",
        "timestamp": "1727313892"
      },
      "message": "Do a thing\n"
    },
    {
      "commit": "1522467d13a8fe29eb32209f175722df41e224b6",
      "merge": [
        "f92c61aef0190641e01294dad3b891b28113e1d5",
        "7ffcbafbf32185da7dccb4b3f49b871f24ab58c4"
      ],
      "author": {
        "name": "Somebody J. Example",
        "email": "somebody@example.com",
        "date": "2024-09-25T18:24:52-07:00",
        "timestamp": "1727313892"
      },
      "committer": {
        "name": "Somebody Else",
        "email": "somebody.else@example.org",
        "date": "2024-09-25T18:24:52-07:00",
        "timestamp": "1727313892"
      },
      "message": "Merge something\n\n* This,\n* That, and\n* The other\n"
    }
  ]
}
```
## References
> [1] Context-Driven Testing Toolkit, git-log2json: Convert git log to JSON, GitHub repository, https://github.com/context-driven-testing-toolkit/git-log2json
> [2] Simon Willison, “Convert git log output to JSON using jq,” til.simonwillison.net, March 22 2023. https://til.simonwillison.net/jq/git-log-json
> [3] Kelly Brazil, jc.parsers.git_log: JSON parser for git log, jc documentation, version 1.5. Retrieved via GitHub Pages, https://kellyjonbrazil.github.io/jc/docs/parsers/git_log.html
> [4] Kelly Brazil, Bringing the Unix Philosophy to the 21st Century, Brazil’s Blog, November 26 2019. https://blog.kellybrazil.com/2019/11/26/bringing-the-unix-philosophy-to-the-21st-century/
Next: Kristoffer Haugsbakk
Message 1 of 5 in “[RFE] Add JSON output to git log commands”
  1. Ron Ziroby RomeroAug 17, 2025
  2. Kristoffer HaugsbakkAug 17, 2025
  3. D. Ben KnobleAug 17, 2025
  4. brian m. carlsonAug 17, 2025
  5. Junio C HamanoAug 17, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.