jsonfmt

2020-06-05

Sometimes you would like to format a JSON file, and you wish a command called jsonfmt like gofmt would be handy. If you have Python3 installed on your system, you already have such a tool installed, its just called with a different name.

Let’s say you have this file - two.json 1.

{"glossary":{"title":"example glossary","GlossDiv":{"GlossList":{"GlossEntry":{"GlossDef":{"GlossSeeAlso":["GML","XML"],"para":"A meta-markup language, used to create markup languages such as DocBook."},"Abbrev":"ISO 8879:1986","GlossSee":"markup","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","ID":"SGML"}},"title":"S"}}}

Not very readable, is it? You can “pretty-print” it like this:

$ python3 -m json.tool two.json
{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "GlossList": {
                "GlossEntry": {
                    "GlossDef": {
                        "GlossSeeAlso": [
                            "GML",
                            "XML"
                        ],
                        "para": "A meta-markup language, used to create markup languages such as DocBook."
                    },
                    "Abbrev": "ISO 8879:1986",
                    "GlossSee": "markup",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "ID": "SGML"
                }
            },
            "title": "S"
        }
    }
}

You can output the formatted JSON to a file like this:

$ python3 -m json.tool two.json three.json

Further, you can sort the keys with the --sort-keys option

$ python3 -m json.tool two.json --sort-keys

{
    "glossary": {
        "GlossDiv": {
            "GlossList": {
                "GlossEntry": {
                    "Abbrev": "ISO 8879:1986",
                    "Acronym": "SGML",
                    "GlossDef": {
                        "GlossSeeAlso": [
                            "GML",
                            "XML"
                        ],
                        "para": "A meta-markup language, used to create markup languages such as DocBook."
                    },
                    "GlossSee": "markup",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "ID": "SGML",
                    "SortAs": "SGML"
                }
            },
            "title": "S"
        },
        "title": "example glossary"
    }
}

CAUTION: The one downside to this tool is, you can’t do an “in-place” formatting. That is, if you try – $ python3 -m json.tool two.json two.json, it will overwrite the original file.

If you want further explore json related tools, look at my json and jq pages.

python json