はじめに
Python組み込みの「json」モジュールを使って、JSONを整形する方法を解説します。
環境
この記事は以下の環境で作成しています。
環境 | バージョンなど |
Python | 3.9.6 |
OS | Wiindows10 |
プログラム概要
プログラムの概要は以下の通りです。
- JSONファイル読み込んで、辞書に出力する
- 辞書から「JSON文字列」を出力する(整形なし)
- 辞書から「JSON文字列」を出力する(整形あり)
- 辞書から「JSONファイル」を出力する(整形あり)
実行結果
後述する「JSONを整形するコード」の実行結果は以下の通りです。
#
# 整形 "なし" の出力
#
{"Email": "james@example.com", "Active": true, "CreatedDate": "2013-01-20T00:00:00Z", "Roles": ["User", "Admin"]}
#
# 整形 "あり" の出力
#
{
"Email": "james@example.com",
"Active": true,
"CreatedDate": "2013-01-20T00:00:00Z",
"Roles": [
"User",
"Admin"
]
}
全体コード
全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。
import json
# ファイルのある場所でPythonを実行するコードです
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# JSONファイルを辞書に読み込みます
with open("test.json", "r") as file:
dict = json.load(file)
# 辞書から「JSON文字列」を出力します(整形なし)
jsonStr = json.dumps(dict)
# 辞書から「JSON文字列」を出力します(整形あり インデント スペース2つ)
jsonStrIndent = json.dumps(dict,indent=2)
# 出力したJSON文字列を表示します。
print(jsonStr)
print(jsonStrIndent)
# json "ファイル" に出力します
with open("output.json", "w") as outputFile:
json.dump(dict, outputFile, indent=2 )
コードのポイント
Pythonの実行場所を設定する
Pythonの実行場所を設定するコードです。
VisualStudioCodeなどで実行する場合、実行場所が「C:\Python」など、Pythonファイルのあるフォルダとは、別の場所を差すことがあります。
その場合「JSONファイルが見つからない」とエラーが出てしまうので、以下のコードで実行場所を「Pythonファイルと同じ場所」に設定しています。
# ファイルのある場所でPythonを実行するコードです
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
ファイルの読み込み
jsonモジュールのload関数を使って、JSONファイルを辞書に読みます。JSONファイルの読み込みについては「こちらの記事」をご覧ください。
# JSONファイルを読み込みます
with open("test.json", "r") as file:
dict = json.load(file)
JSON文字列の出力
jsonモジュールのdumps関数を使って、辞書から「JSON文字列」を出力します。
dumps関数ではindentを指定しない場合、改行やインデントのない、一行のJSON文字列が出力されます。人間にやさしい形のJSON文字列を出力する場合は、「indent」にプラスの整数を指定してください。
※ 「0」を設定すると、改行だけされたJSON文字列が出力されます。
# json "文字列" を出力します(整形なし)
jsonStr = json.dumps(dict)
# json "文字列" を出力します(整形あり インデント スペース2つ)
jsonStrIndent = json.dumps(dict,indent=2)
dump関数には「ensure_ascii」を設定することで、日本語の文字列をエスケープシーケンスなしで出力する設定もあります。詳しくは「こちら」の記事をご覧ください。
JSON文字列のコンソール出力
上のコードのコンソール出力結果です(コメントは説明用に追加しています)。
#
# 整形 "なし" の出力
#
{"Email": "james@example.com", "Active": true, "CreatedDate": "2013-01-20T00:00:00Z", "Roles": ["User", "Admin"]}
#
# 整形 "あり" の出力
#
{
"Email": "james@example.com",
"Active": true,
"CreatedDate": "2013-01-20T00:00:00Z",
"Roles": [
"User",
"Admin"
]
}
ファイル出力時の整形
JSON文字列と同様に、「JSONファイル」へ出力する際もindentの設定が使えます。
ファイル出力用のload関数のindentに整数を設定します。
# json "ファイル" に出力します
with open("output.json", "w") as outputFile:
json.dump(dict, outputFile, indent=2 )
上記のコードにより、Pythonファイルと同じフォルダに整形された「output.json」が出力されます。
まとめ
Python組み込みの「json」モジュールを使って、JSONを整形する方法を解説しました。参考になればうれしいです。
お知らせ
3月号の『日経ソフトウェア』はPythonの特集。穴埋め式クイズで学ぶPython入門や、PythonでExcelを動かす方法などが特集されています。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。