JSON出力のフォーマット
Coddyの「Python JSON」コースのレッスン 5/9。
JSONデータを扱う際、可読性を高めるために出力を整形すると便利なことがよくあります。Pythonの json.dumps() 関数には、JSON出力のフォーマットを制御するためのパラメータが用意されており、より人間が読みやすい形式にすることができます。このプロセスは、多くの場合「プリティプリント(整形表示)」と呼ばれます。
indent パラメータ
json.dumps() の indent パラメータを使用すると、インデントに使用するスペースの数を指定できます。これにより、より読みやすい階層構造が作成されます:
import json
data = {"name": "John", "age": 30, "city": "New York"}
# インデントなし
print(json.dumps(data))
# インデントあり
print(json.dumps(data, indent=2))
indent=2 を指定した出力は以下のようになります:
{
"name": "John",
"age": 30,
"city": "New York"
}
separators パラメータ
separators パラメータを使用すると、項目間およびキーと値のペアのセパレータ(区切り文字)を指定できます。これは、(item_separator, key_separator) という2つの文字列のタプルです。
# デフォルトのセパレータ
print(json.dumps(data, indent=2))
# カスタムセパレータ
print(json.dumps(data, indent=2, separators=(', ', ': ')))
デフォルトのセパレータは (', ', ': ') です。このパラメータを使用して、出力をよりコンパクトにしたり、余分なスペースを追加したりできます。
パラメータの組み合わせ
これらのパラメータを組み合わせて、JSON出力を細かく制御できます:
formatted_json = json.dumps(data, indent=4, separators=(', ', ': '))
print(formatted_json)
この組み合わせにより、きれいに整形された読みやすいJSON出力が得られます。これは、複雑な入れ子構造を扱う場合や、JSONデータをより人間が読みやすい形式で提示する必要がある場合に特に便利です。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単カスタムのインデントとセパレータを使用して、ネストされたJSON構造をフォーマットする関数を作成してください。この関数は以下を行う必要があります:
- 3つのパラメータ(Pythonの辞書またはリスト、インデントレベル、およびコンパクトな出力のためのブール値フラグ)を受け取ります。
json.dumps()を使用して、入力をJSON文字列に変換します。- コンパクトフラグが False の場合はインデントを指定されたレベルに設定し、そうでない場合はインデントを使用しません。
- コンパクトフラグが False の場合は、項目セパレータとしてカンマの後にスペース (", ") を、キーセパレータとしてコロンの後にスペース (": ") を使用します。コンパクトフラグが True の場合は、スペースなしのカンマ (",") とコロン (":") を使用します。
- フォーマットされたJSON文字列を返します。
以下の入力が提供されます:
{"menu": {"id": "file", "value": "File", "popup": {"menuitem": [{"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"}]}}}
4
false
結果として得られるフォーマットされたJSON文字列を出力してください。
自分で試してみよう
import json
# 入力を読み込む
json_input = input()
indent_level = int(input())
compact = input().lower() == 'true'
# JSON入力をパースする
data = json.loads(json_input)
def format_json(data, indent, compact):
# TODO: ここにコードを記述してください
# カスタムJSONフォーマット関数を実装してください
pass
# JSONをフォーマットして結果を出力する
formatted_json = format_json(data, indent_level, compact)
print(formatted_json)Python JSONのすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ
好きなJSONを整形して見る: JSON フォーマッタ