Python のワンライナーコマンドで JSON ファイルを整形する (json.tool)

json.tool の基本

Python 2.6 以降には json モジュールが標準搭載されていて、これはコマンドラインからも便利に利用することができます。 下記は、json.tool モジュール を使って JSON 形式のテキスト出力を、きれいに整形しなおして出力するワンライナーの例です。

$ python -mjson.tool input.json

# あるいは

$ cat input.json | python -mjson.tool

ここでは、次のような JSON ファイルを使って試してみます。 スペースはわざとぐちゃぐちゃに入れています。

input.json(入力ファイル)
{"ccc"  : 300, "aaa":100,  "bbb":200, "data": [1,2,3]}
実行例
$ python -mjson.tool input.json
{
    "ccc": 300,
    "aaa": 100,
    "bbb": 200,
    "data": [
        1,
        2,
        3
    ]
}

キー名でソートして出力する (–sort-keys)

Python 3.7 以降で、キーの順序は入力ファイルのものが保持されるようになりました(内部的に辞書オブジェクト (dict) のキー挿入順序が保持されるようになりました)。 キー順序をアルファベット順にソートして出力したいときは、--sort-keys オプションを指定します。

キー順にソートする
$ python -mjson.tool --sort-keys input.json
{
    "aaa": 100,
    "bbb": 200,
    "ccc": 300,
    "data": [
        1,
        2,
        3
    ]
}

インデントサイズを指定する (–indent=N)

バージョン 3.9 以降では、--indent オプションで、インデントサイズの調整などもできるようになっています。

インデントサイズを 2 にする
$ python -mjson.tool --indent=2 input.json
{
  "ccc": 300,
  "aaa": 100,
  "bbb": 200,
  "data": [
    1,
    2,
    3
  ]
}

インデントや改行なしで出力する (–compact)

余計なスペースや改行を取り除いて、1 行でコンパクトに出力するには、--compact オプションを使用します。 プログラムへの入力にしか使わない JSON データは、このように圧縮されていると効率的です。

コンパクトに出力する
$ python -mjson.tool --compact input.json
{"ccc":300,"aaa":100,"bbb":200,"data":[1,2,3]}