json.tool の基本
Python 2.6 以降には json
モジュールが標準搭載されていて、これはコマンドラインからも便利に利用することができます。
下記は、json.tool モジュール を使って JSON 形式のテキスト出力を、きれいに整形しなおして出力するワンライナーの例です。
$ python -mjson.tool input.json
# あるいは
$ cat input.json | python -mjson.tool
ここでは、次のような 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
オプションで、インデントサイズの調整などもできるようになっています。
$ 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]}