PythonでWeb APIを叩いたり、設定ファイルを扱ったりする際、辞書型(dict)のデータをJSON形式に変換する処理は避けて通れません。
dict をJSON文字列にしたい」「JSONファイルとして保存したい」
「日本語が
\uXXXX みたいに文字化けするのを直したい」こうした要望は、Pythonの標準ライブラリである json モジュールを使えば簡単に解決できます。
しかし、json.dumps と json.dump の違いや、オプションの使い分けで迷うことも少なくありません。
この記事では、Pythonの辞書(dict)をJSONに変換する基本的な方法から、ファイルへの書き出し、インデントによる整形、そして日本語を正しく出力するためのテクニックまで、サンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
- OS:Windows 11 / macOS Sequoia
- IDE:Visual Studio / VS Code / IntelliJ IDEA
- その他:Chrome DevTools / 各言語最新安定版
※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。
dict(辞書)をJSON文字列に変換する json.dumps
まずは、Pythonの辞書オブジェクトを「JSON形式の文字列(str)」に変換する基本操作です。
これには json.dumps 関数を使用します。
APIのリクエストボディを作成したり、ログに出力したりする場合によく使われます。
基本的な変換方法
import json
# 変換したい辞書データ
user_data = {
"id": 101,
"name": "Alice",
"is_active": True,
"scores": [80, 90, 95]
}
# 辞書をJSON文字列に変換
json_str = json.dumps(user_data)
print(f"型: {type(json_str)}")
print(json_str)
実行結果
型: <class 'str'>
{"id": 101, "name": "Alice", "is_active": true, "scores": [80, 90, 95]}
json.dumps(user_data) を実行することで、Pythonの辞書型がJSON形式の文字列に変換されました。
注目すべきは、Pythonでは True(先頭大文字)だったものが、JSONでは true(小文字)に変換されている点です。
json モジュールは、Pythonの型とJSONの型を自動的にマッピングしてくれます。
日本語が文字化けする場合の対処法(ensure_ascii)
デフォルトの設定では、日本語などの非ASCII文字は \uXXXX のようなユニコードエスケープシーケンスに変換されてしまいます。
日本語をそのまま出力したい場合は、ensure_ascii=False オプションを指定します。
import json
data = {"message": "こんにちは"}
# デフォルト(文字化けのように見える)
print(json.dumps(data))
# ensure_ascii=False を指定(日本語のまま出力)
print(json.dumps(data, ensure_ascii=False))
実行結果
{"message": "\u3053\u3093\u306b\u3061\u306f"}
{"message": "こんにちは"}
json.dumps はデフォルトで ensure_ascii=True になっており、すべての文字をASCII文字で表現しようとします。
これを False にすることで、UTF-8などの文字がそのまま出力され、人間にとって読みやすいJSONになります。
JSONを見やすく整形する(インデント)
APIのレスポンスなど、複雑なJSONデータは1行で出力されると非常に読みづらいです。
indent オプションを指定することで、きれいな形式(Pretty Print)で出力できます。
indentオプションの使い方
import json
data = {
"users": [
{"id": 1, "name": "Tanaka"},
{"id": 2, "name": "Suzuki"}
],
"count": 2
}
# インデントを4スペースに設定
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)
実行結果
{
"users": [
{
"id": 1,
"name": "Tanaka"
},
{
"id": 2,
"name": "Suzuki"
}
],
"count": 2
}
indent=4 を指定すると、階層ごとにスペース4つ分のインデントが挿入され、改行も自動で行われます。
デバッグ時や、設定ファイルとして保存する場合には必須のテクニックです。
一般的には 2 または 4 が使われます。
dict(辞書)をJSONファイルとして保存する json.dump
文字列として取得するのではなく、直接ファイル(.json)に書き出したい場合は、json.dump 関数を使います。
dumps(sがついている=string)との違いに注意しましょう。
ファイルへの書き出し手順
import json
data = {
"app_name": "My App",
"version": 1.0,
"settings": {"theme": "dark", "notifications": True}
}
# ファイルを書き込みモードで開く
# encoding='utf-8' を指定するのがベストプラクティス
with open("config.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print("config.json に保存しました。")
実行結果
(カレントディレクトリに config.json が作成されます)
コードの解説
open()関数でファイルを書き込みモード("w")で開きます。この際、文字コードutf-8を明示しておくと、Windows環境などでの文字化けトラブルを防げます。json.dump(データ, ファイルオブジェクト)の順に引数を渡します。- ここでも
indentやensure_asciiオプションは同様に使用可能です。
逆変換:JSONからdictへの変換(loads / load)
参考までに、JSONをPythonの辞書に戻す方法も確認しておきましょう。
文字列から戻すなら json.loads、ファイルから読み込むなら json.load です。
import json
# JSON文字列
json_text = '{"id": 1, "name": "Python"}'
# 辞書に変換
data_dict = json.loads(json_text)
print(data_dict["name"]) # Python
ソート機能:キーの順序を揃える
Python 3.7以降、辞書の順序は保存されますが、JSONとして出力する際にキーをアルファベット順にソートしたい場合は sort_keys=True を使います。
import json
data = {"c": 3, "a": 1, "b": 2}
# キーでソートして出力
print(json.dumps(data, sort_keys=True))
実行結果
{"a": 1, "b": 2, "c": 3}
データの比較を行いたい場合や、Gitでの差分を見やすくしたい場合に有効です。
Pythonのスキルを活かして年収を上げる方法
以上、PythonでdictをJSONに変換・保存する方法について解説してきました。
Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



