🐍 Python

indent / sort_keys で見やすく整形出力する

json.dumps()は既定だと1行に詰め込まれた文字列を返しますが、indent引数を指定すると人間が読みやすい階層インデント付きの出力になります。sort_keysと組み合わせるとキーの並び順も揃えられます。

json.dumps(obj, indent=2)               # 2文字幅でインデント整形
json.dumps(obj, sort_keys=True)         # キーをアルファベット順に並べ替え
json.dumps(obj, indent=2, sort_keys=True) # 両方組み合わせる
import json

data = {"b": 2, "a": 1, "c": 3}
print(json.dumps(data, indent=2))
# {
#   "b": 2,
#   "a": 1,
#   "c": 3
# }
# sort_keysだけだと1行のままキー順が変わる
import json

data = {"b": 2, "a": 1, "c": 3}
print(json.dumps(data, sort_keys=True))
# {"a": 1, "b": 2, "c": 3}
# 両方指定すれば、整形されつつキー順も揃う
import json

data = {"b": 2, "a": 1, "c": 3}
print(json.dumps(data, indent=2, sort_keys=True))
# {
#   "a": 1,
#   "b": 2,
#   "c": 3
# }
indent/sort_keysの効果
indent(整数)
階層ごとの字下げ幅を指定する。指定しない場合(既定None)は改行・字下げ無しの最短表現になる
sort_keys(既定False)
Trueにすると、辞書のキーをアルファベット順に並べ替えて出力する。挿入順を保ちたい場合はFalseのままにする
💡 AIコードレビュー観点:sort_keysは差分比較・テストの安定化にも使える

2つのJSON文字列が「意味的に同じか」を比較したい場合、辞書のキー順序が異なるだけで単純な文字列比較(==)はFalseになります。AIが生成したテストコードでjson.dumps(a) == json.dumps(b)のような比較をしていたら、sort_keys=Trueを両方に付けて出力順序を揃えるか、いっそjson.loads()で辞書に戻してから比較する方が確実です。本番のAPI出力を整形して人が読む用途ではindent付きが便利ですが、通信量を減らしたい場合は整形無しのままにするのが一般的です。

← Python json クイックリファレンス一覧へ戻る / ensure_asciiで非ASCII文字を制御する →