Pythonのプログラム内で扱っている辞書(dict)やリスト(list)などのデータを、Web APIへの送信やログ出力のために「JSON形式の文字列」に変換するには、標準ライブラリ json モジュールの dumps() 関数を使用します。
特に日本語を含むデータを扱う場合や、人間が見やすい形式で出力したい場合に重要となるオプション引数(ensure_ascii, indent)についても解説します。
目次
実装例:図書館の蔵書データのJSON化
ここでは、Pythonの辞書として管理されている「図書館の蔵書情報」を、外部システムへ送信するためにJSON文字列へ変換するシナリオを実装します。
ソースコード
import json
# 1. Pythonの辞書データを用意
# 文字列、数値、ブール値、ネストしたリストなどを含めます
library_data = {
"library_name": "中央図書館",
"location": "Tokyo",
"books": [
{
"title": "吾輩は猫である",
"author": "夏目漱石",
"is_available": True
},
{
"title": "銀河鉄道の夜",
"author": "宮沢賢治",
"is_available": False
}
],
"total_count": 15000
}
# 2. json.dumps() で辞書をJSON形式の文字列に変換
# dumps = dump string の略
# ensure_ascii=False : 日本語をUnicodeエスケープ(\uXXXX)せずそのまま出力する
# indent=4 : インデントを入れて整形する(見やすくする)
json_str = json.dumps(library_data, ensure_ascii=False, indent=4)
# 結果の確認
print("--- 変換後の型 ---")
print(type(json_str)) # <class 'str'>
print("\n--- JSON文字列 ---")
print(json_str)
実行結果
--- 変換後の型 ---
<class 'str'>
--- JSON文字列 ---
{
"library_name": "中央図書館",
"location": "Tokyo",
"books": [
{
"title": "吾輩は猫である",
"author": "夏目漱石",
"is_available": true
},
{
"title": "銀河鉄道の夜",
"author": "宮沢賢治",
"is_available": false
}
],
"total_count": 15000
}
解説
json.dumps(obj) の役割
Pythonオブジェクトを受け取り、JSONフォーマットの文字列を返します。 (※ファイルに直接書き込む json.dump() とは異なります)
重要なオプション引数
ensure_ascii=False- デフォルト (
True): 日本語などの非ASCII文字はすべて\u6771のようなUnicodeエスケープシーケンスに変換されます。データ転送上の安全性は高いですが、人間には読めません。 False: 文字そのままで出力します。日本語をログや画面で見やすく出力したい場合は必須の設定です。
- デフォルト (
indent=数値- 指定なし: 改行や空白を含まない1行の文字列として出力されます(データサイズ最小)。
- 数値(例: 2 や 4): 指定したスペース数でインデントされ、階層構造が見やすく整形(Pretty Print)されます。デバッグ時や設定ファイル生成時に便利です。
- Python型との変換
- Pythonの
True/Falseは、JSONのtrue/false(小文字)に変換されます。 - Pythonの
Noneは、JSONのnullに変換されます。
- Pythonの
